107

C++ での Unicode 処理のベスト プラクティスは何ですか?

4

9 に答える 9

81
  • ICUを使用 してデータ (または同様のライブラリ) を処理します
  • 独自のデータ ストアでは、すべてが同じエンコーディングで保存されていることを確認してください
  • is_alpha文字列の長さ、大文字化のステータスなどの日常的なタスクには、常に Unicode ライブラリを使用していることを確認してください。それが必要な定義でない限り、標準ライブラリの組み込みを使用しないでください。
  • 私はそれを十分に言うことはできません:正確さを気にする場合は、 a のインデックスを反復処理しないでください。これには常に Unicode ライブラリを使用してください。string
于 2008-09-11T01:37:17.303 に答える
10

以前の 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などを使用する必要があるかもしれません。現在、異なるエンコーディング間のテキスト変換をより強力にサポートするためのいくつかの提案が進行中です。私の推測 (および希望) は、これが次のテクニカル レポートの一部になることです。

于 2012-11-21T01:09:03.840 に答える
8

当社 (およびその他の企業) は、もともと Taligent が開発したオープン ソースのInternation Components for Unicode (ICU) ライブラリを使用しています。

文字列、ロケール、変換、日付/時刻、照合、変換などを処理します。アル。

ICU ユーザーガイドから始める

于 2008-09-11T01:46:51.977 に答える
5

以下は、Windows プログラミングのチェックリストです。

  • _T("my string") で囲まれたすべての文字列
  • strlen() など _tcslen() などに置き換えられた関数
  • char * および const char * の代わりに LPTSTR および LPCTSTR を使用します。
  • Dev Studio で新しいプロジェクトを開始するときは、プロジェクトのプロパティで Unicode オプションが選択されていることを確認してください。
  • C++ 文字列の場合、std::string の代わりに std::wstring を使用します
于 2008-09-11T01:33:53.503 に答える
3

C++ での大文字と小文字を区別しない文字列比較を見てください。

その質問には、Unicode に関する Microsoft ドキュメントへのリンクがあります: http://msdn.microsoft.com/en-us/library/cc194799.aspx

その記事の横にある MSDN の左側のナビゲーション サイドを見ると、Unicode 関数に関する多くの情報が見つかるはずです。これは、「文字のエンコード」に関する章の一部です ( http://msdn.microsoft.com/en-us/library/cc194786.aspx ) 。

次のサブセクションがあります。

  • コードページ モデル
  • Windows の 2 バイト文字セット
  • ユニコード
  • 混合環境での互換性の問題
  • Unicode データ変換
  • Windows ベースのプログラムを Unicode に移行する
  • 概要
于 2008-09-11T01:40:08.980 に答える
2

これは誰にとってもベスト プラクティスではないかもしれませんが、必要に応じて独自の C++ UNICODE ルーチンを作成できます。

ちょうど週末にやり終えました。100% バグがないことを保証するものではありませんが、多くのことを学びました。多くのテストを行い、正しく動作しているようです。

私のコードは New BSD ライセンスの下にあり、ここで見つけることができます:

http://code.google.com/p/netwidecc/downloads/list

これは WSUCONV と呼ばれ、UTF-8、UTF-16、および標準 ASCII の間で変換を行うサンプルの main() プログラムが付属しています。メインのコードを捨てれば、UNICODE を読み書きするための素敵なライブラリが手に入ります。

于 2012-03-12T04:10:39.177 に答える
1

上で述べたように、大規模なシステムを使用する場合はライブラリが最適です。ただし、自分で処理したい場合もあります (ライブラリがマイクロコントローラーのように多くのリソースを使用するため)。この場合、実際に必要なものの一部をコピーできる単純なライブラリが必要です。

Willow Schlanger のサンプル コードは良いもののようです (詳細については、彼の回答を参照してください)。

また、コードが小さいが、完全なエラー チェックがなく、UTF-8 のみを処理するが、部品を取り出すのが簡単な別のものも見つけました。

まともな組み込みライブラリのリストを次に示します。

組み込みライブラリ

于 2013-02-15T19:15:15.187 に答える
0

IBM のInternational Components for Unicodeを使用する

于 2008-09-11T01:39:07.097 に答える