C ++でのUnicode処理のベストプラクティスは何ですか?
C ++でのUnicode処理のベストプラクティスは何ですか?
回答:
以前のC ++標準との下位互換性を気にしない場合は、現在のC ++ 11標準にUnicodeサポートが組み込まれています。http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
したがって、C ++でのUnicode処理の真のベストプラクティスは、組み込みの機能を使用することです。ただし、現在のところ標準が非常に新しいため、古いコードベースでは常にそうであるとは限りません。
編集:明確にするために、C ++ 11はUnicodeリテラルとUnicode文字列をサポートするようになり、Unicodeに対応しています。ただし、標準ライブラリでは、Unicodeの処理と変換のサポートが制限されています。現在のニーズにはこれで十分かもしれません。ただし、現時点で大量の処理を行う必要がある場合は、ICUなどを使用して、より詳細な処理を行う必要があります。現在、さまざまなエンコーディング間のテキスト変換をより強力にサポートするための提案がいくつか進められています。これは次のテクニカルレポートの一部になると思います(そして希望します)。
当社(およびその他)は、Taligentが最初に開発したオープンソースのInternation Components for Unicode(ICU)ライブラリを使用しています。
文字列、ロケール、変換、日付/時刻、照合、変換などを処理します。al。
始まる ICUユーザガイドの
Windowsプログラミングのチェックリストは次のとおりです。
C ++で大文字と小文字を区別しない文字列比較を見てください。
その質問には、Unicodeに関するMicrosoftのドキュメントへのリンクがあります。http://msdn.microsoft.com/en-us/library/cc194799.aspx
その記事の横にあるMSDNの左側のナビゲーション側を見ると、Unicode関数に関する多くの情報が見つかるはずです。「文字のエンコード」に関する章の一部です(http://msdn.microsoft.com/en-us/library/cc194786.aspx)
次のサブセクションがあります。
これはすべての人にとってベストプラクティスとは限りませんが、必要に応じて独自のC ++ UNICODEルーチンを作成できます。
週末に終わりました。多くのことを学びましたが、100%バグがないことを保証するものではありませんが、多くのテストを行ったところ、正しく動作しているようです。
私のコードはNew BSDライセンスの下にあり、ここで見つけることができます:
http://code.google.com/p/netwidecc/downloads/list
これはWSUCONVと呼ばれ、UTF-8、UTF-16、および標準ASCII間で変換するサンプルmain()プログラムが付属しています。メインコードを捨てれば、UNICODEを読み書きするための素晴らしいライブラリが手に入ります。
上記で述べたように、大規模なシステムを使用する場合はライブラリが最善の策です。ただし、自分で処理したい場合もあります(おそらく、ライブラリがマイクロコントローラーのような多くのリソースを使用するためです)。この場合、実際に必要なもののためにパーツをコピーできる単純なライブラリが必要です。
Willow Schlangerのサンプルコードは良いようです(詳細については彼の回答を参照してください)。
また、コードが小さいものの、完全なエラーチェックがなく、UTF-8のみを処理するが、部品を取り出すのが簡単な別のコードも見つけました。
まともな組み込みライブラリのリストは次のとおりです。
Unicodeには IBMの国際コンポーネントを使用してください
string
をバイナリデータとして扱わない限り。