ホームページ >バックエンド開発 >C++ >C 11 の文字列リテラルはさまざまな Unicode エンコーディングをどのように処理しますか?

C 11 の文字列リテラルはさまざまな Unicode エンコーディングをどのように処理しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 00:06:11735ブラウズ

How Do C  11 String Literals Handle Different Unicode Encodings?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。