UTF 形式の文字列リテラルを定義する - C++ プログラミング

PROGRAM


UTF 形式の文字列リテラルを定義する

C++11 規格に準拠したコンパイラでは、UTF-8 や UTF-16, UTF-32 といった文字コードの文字列リテラルを定義できます。

Xcode 4.6 では使用できますが、Visual Studio 2012 では利用できないので注意してください。

 

UTF の文字列リテラルは、次のようにして使用します。

const char* string1 = u8"UTF-8 文字列";

const char16_t* string2 = u"UTF-16 文字列";

const char32_t* string3 = U"UTF-32 文字列";

このように、文字列リテラルの先頭に文字コードを意味する記号を付けます。

記号 データ型 用途
u8 char UTF-8 を表す文字列リテラル
u char16_t UTF-16 を表す文字列リテラル
U char32_t UTF-32 を表す文字列リテラル

このうちの UTF-16 と UTF-32 用の記号については、文字型(単体)を表すリテラルにも使用できます。

char word1 = 'a';

char16_t word2 = u'あ';

char32_t word3 = U'い';

 

raw 文字列と合わせて使用する

UTF 形式の文字リテラルでも、エスケープ記号を使わない raw 文字列形式を使うことができます。

使い方は raw 文字列を使ってエスケープ文字を省略する で記したのとほとんど同じで、違いとしては、先頭に UTF を示す記号を追加するだけです。

const char* string1 = u8R"("UTF-8" 文字列)";

const char16_t* string2 = uR"("UTF-16" 文字列)";

const char32_t* string3 = UR"("UTF-32" 文字列)";

このようにすることで、エスケープ記号をたくさん使わないといけなかったような文字列リテラルも簡単に定義することができます。


[ もどる ]