Unicodeとは、符号化文字集合や文字符号化方式などを定めた文字コードの業界規格
gccのデフォルトはutf-8
c言語で文字列を扱うにはマルチバイトセットとUnicodeがある
#include <stdio.h> int main(void){ char str[] = "あいうえお順"; printf("%s\n", str); return 0; }
$ ./main
あいうえお順
-> 日本語で出力されます
char str[] = "\u3042\u3044\u3046";
$ ./main
あいう
C言語では、wchar_t型がワイド文字型と呼ばれ、Unicode文字を表現する際に使われる
文字を「L”」で囲むと、その文字を表現するワイド文字型の数値となる
wchar_t 型を使用する際には、ロケール(地域)を設定する必要がある
mac OSやLinuxでは、ワイド文字型は通常は32ビット
#include <stdio.h> #include <wchar.h> //linuxでwcharを使うのに必要 #include <locale.h> int main(void){ wchar_t wc = L'a'; setlocale(LC_ALL,"ja_JP.UTF-8");; wprintf(L"変数wcに格納された文字は%c\n", wc); wprintf(L"変数wcに格納された文字は%4x\n", wc); return 0; }
$ ./main
??wc?????????a
??wc????????? 61
あれ、wprintfだと文字化けするな。何故だ。