ホームページ >バックエンド開発 >C++ >C の `wchar_t` と `wstring` が国際化にとって問題があると考えられるのはなぜですか?

C の `wchar_t` と `wstring` が国際化にとって問題があると考えられるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-23 10:53:16708ブラウズ

Why Are C  's `wchar_t` and `wstring` Considered Problematic for Internationalization?

C の wchar_t と wstrings の欠点

ワイド文字 (wchar_t) とワイド文字列 (wstring) は、特に次のような理由で C コミュニティ内で批判を集めています。 Windows APIで使用します。この記事では、これらの概念の欠点を検証し、国際化のための代替アプローチを検討します。

wchar_t の探索

wchar_t は、すべてのロケールの文字コードを表すように設計されており、コード間の 1 対 1 のマッピングを提供します。ユニットもキャラクターも。ただし、その仕様は文字とコード ポイント間の直接の関係を前提としているため、Unicode はこれに違反します。この矛盾により、汎用テキスト表現として、またはテキスト アルゴリズムを簡素化するために wchar_t を使用することは非現実的になります。

実際の wchar_t の制限

移植可能なコードの場合、wchar_t の用途は限定的です。 __STDC_ISO_10646__ の存在は、Unicode コード ポイントへの直接マッピングを示しますが、プラットフォーム間で一貫して依存することはできません。たとえば、Windows は wchar_t エンコーディングとして UTF-16 を採用しており、さらなる複雑さが生じています。

代替手段

UTF-8 エンコードされた C 文字列:
この代替手段は次のことを提供します。ポータブルなテキスト表現であり、ワイド文字の複雑さを回避します。最新のプラットフォームのほとんどは UTF-8 をネイティブに採用しており、単純なテキスト アルゴリズムのサポートはありませんが、エラーの検出と修正が容易になります。

クロスプラットフォーム表現:
一部のソフトウェアはカスタム表現を使用します。必要なライブラリのサポートと言語を前提とした、UTF-16 でエンコードされた符号なしの短い配列と同様

C 11 ワイド文字:
C 11 では、wchar_t の代替として char16_t と char32_t が導入されています。それぞれ UTF-16 と UTF-32 を表すことが明示的に保証されているわけではありませんが、主要な実装はこの規則に従う可能性が高くなります。 UTF-8 文字列リテラルを含む UTF-8 サポートの改善により、国際化アプリケーションに対する C 11 のユーティリティがさらに強化されました。

回避すべきオプション

TCHAR:
TCHAR は主にレガシー Windows プログラムの移行に使用されますが、移植性がなく、エンコードとデータ型に特異性がなく、外部では価値がありません。

結論として、wchar_t と wstrings は、汎用的ではないため、クロスプラットフォームの国際化の取り組みに課題をもたらします。ここで説明する代替案は、国際化されたテキストを処理するための、より多用途で移植可能なソリューションを提供します。

以上がC の `wchar_t` と `wstring` が国際化にとって問題があると考えられるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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