2016-04-08 9 views

答えて

3

を、文字列は、文字は、お使いのプラットフォームのを設定実行にエンコードされます。実行文字セットはUTF-8(いくつかのプラットフォームではデフォルト)でもかまいませんが、常にUTF-8とみなすことはできません(this answer参照)。

実行文字セットが汎用文字名(または文字列リテラルの他の値)をエンコードできない場合、結果は実装定義です(つまり、エラーまたは一部のセンチネル値が発生する可能性があります)。 -fexec-charset=asciiとGCC 5.3を使用してコンパイルする場合

const char* c = "\u00a7"; 

、それはエラーで失敗します:U + 00A7は、ASCIIでエンコードすることができないので、

error: converting UCN to execution character set: Invalid or incomplete multibyte or wide character

これは例えば、コードを考えてみましょう。しかし、u8接頭辞を使用して:

const char* c = u8"\u00A7"; 

コンパイルが成功し、バイト0xC20xA70x00からcポイント。

u8接頭辞を使用すると、プラットフォームの構成に関係なく、文字列にUTF-8でエンコードされていることが保証されます。

関連する問題