C 11 の文字列リテラルの Unicode エンコーディング
C 11 での新しい文字および文字列リテラル型の導入により、言語の機能が拡張されました。 Unicode エンコードを処理します。現在、4 つの文字タイプ (char、wchar_t、char16_t、char32_t) と 5 つの文字列リテラル タイプがありますが、これらの文字と文字列の動作とエンコード メカニズムとの互換性には、特定のルールがあります。
エンコードの互換性
x 文字参照はすべての文字列タイプで使用でき、次のように表される文字値を含めることができます。 16進数。ただし、u および U 参照は、UTF エンコードされたセマンティクスを持つ文字列に制限されます。文字参照は、含まれる文字列のエンコーディングに基づいて変換されます。
文字列の長さとエンコーディング
ただし、文字列に含まれる Unicode コード単位の数は、文字列によって異なる場合があります。エンコーディングでは、文字列リテラルを表す配列は固定幅であり、各要素は単一のコード単位を表します。使用されるコード単位の数は、文字列の Unicode エンコードによって決まります。
UTF エンコーディング セマンティクス
u"" 文字列リテラルは、具体的には UTF-16 でエンコードされます。一方、u8"" 文字列リテラルは UTF-8 でエンコードされます。 UTF-16 エンコーディングは char16_t コード単位を使用しますが、UTF-8 エンコーディングは可変長バイト シーケンスを使用してコード ポイントを表します。 0xDFFF) は、u シーケンス内のコード ポイントとして許可されません。この範囲の Unicode 文字を表すには、UTF-16 サロゲート ペアを使用する必要があります。
エンコーディング認識
標準の文字列操作関数は、本質的に Unicode エンコード セマンティクスを処理せず、UTF を処理します。 - 個々のコード単位のシーケンスとしてエンコードされた文字列。ただし、ロケールを介した入出力ストリームにより、適切なコンテキスト化を使用して Unicode でエンコードされた値の読み取りと書き込みが可能になります。
以上がC 11 の文字列リテラルはさまざまな Unicode エンコーディングをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。