純粋な C++ を使用して Unicode 文字列を正しく処理するにはどうすればよいですか?
つまり、ユニコード文字列を std::string に入れてその長さを数えると、5 文字の長さの文字列で 10 文字になることがあります。
彼らは本格的なオープンソース プログラムでどのようにそれを行うのでしょうか? クロスプラットフォームでどのようにそれを行うのですか? ファイル i/o および stdin/stdout ストリームにどのように関連付けますか?
ありがとう。
純粋な C++ を使用して Unicode 文字列を正しく処理するにはどうすればよいですか?
つまり、ユニコード文字列を std::string に入れてその長さを数えると、5 文字の長さの文字列で 10 文字になることがあります。
彼らは本格的なオープンソース プログラムでどのようにそれを行うのでしょうか? クロスプラットフォームでどのようにそれを行うのですか? ファイル i/o および stdin/stdout ストリームにどのように関連付けますか?
ありがとう。
Boost.Localeがあります。これは、C ++で記述されており、ICUライブラリをラップし、エイリアンではない優れたインターフェイスを提供します。
Unicodeの作業では、最初にBoost.Localeを選択し、次にICUを直接選択します(Boost.Localeがまだラップしていないものがある場合)。
std::[w]string
、一般的な信念に反して、Unicodeはまったくサポートされていません。[w]char[_t]
どちらも、エンコーディングにとらわれない方法で、ユニットに対してのみ動作します。
長さ、変換、およびエンコーディング検証の形式で基本的なUnicodeサポートのみが必要な場合は、utfcppがあります。これは、これらの操作に美しいC++インターフェイスを提供します。
QtやwxWdigetsのようなアプリケーションフレームワークは独自のstring
クラスを提供します。これはより優れたUnicodeサポートを提供しますが、多くの場合、コード全体でフレームワーク全体を使用する必要があります。
それとは別に、今日の標準的なUnicode実装であるICUがあります。
このWebサイトでC++マスターの1人が進行中の作業はogonekです。Lounge<C++>
StackOverflowチャットルームから作者に連絡して、進行状況の詳細を尋ねることができます。
これが方法です:http://www.utf8everywhere.org
ICU は現在Unicodeライブラリです。クロスプラットフォームの Unicode サポートが必要な場合は、基本的に ICU でしか入手できません。
そのインターフェースが、自動散弾銃の間違った端よりも不親切でなかったら.
http://site.icu-project.orgはもうチェックしましたか?
これを行うためにwxWidgetsを使用しました。これにより、std::string から文字列型 wxString への変換が容易になります。理想的ではありませんが、うまく機能し、シンプルで移植性があります。