2

純粋な C++ を使用して Unicode 文字列を正しく処理するにはどうすればよいですか?

つまり、ユニコード文字列を std::string に入れてその長さを数えると、5 文字の長さの文字列で 10 文字になることがあります。

彼らは本格的なオープンソース プログラムでどのようにそれを行うのでしょうか? クロスプラットフォームでどのようにそれを行うのですか? ファイル i/o および stdin/stdout ストリームにどのように関連付けますか?

ありがとう。

4

6 に答える 6

5

Boost.Localeがあります。これは、C ++で記述されており、ICUライブラリをラップし、エイリアンではない優れたインターフェイスを提供します。

Unicodeの作業では、最初にBoost.Localeを選択し、次にICUを直接選択します(Boost.Localeがまだラップしていないものがある場合)。

于 2012-08-12T14:46:42.890 に答える
4

std::[w]string、一般的な信念に反して、Unicodeはまったくサポートされていません。[w]char[_t]どちらも、エンコーディングにとらわれない方法で、ユニットに対してのみ動作します。

長さ、変換、およびエンコーディング検証の形式で基本的なUnicodeサポートのみが必要な場合は、utfcppがあります。これは、これらの操作に美しいC++インターフェイスを提供します。

QtやwxWdigetsのようなアプリケーションフレームワークは独自のstringクラスを提供します。これはより優れたUnicodeサポートを提供しますが、多くの場合、コード全体でフレームワーク全体を使用する必要があります。

それとは別に、今日標準的なUnicode実装であるICUがあります。

このWebサイトでC++マスターの1人が進行中の作業はogonekです。Lounge<C++>StackOverflowチャットルームから作者に連絡して、進行状況の詳細を尋ねることができます。

于 2012-08-12T14:08:43.440 に答える
2

これが方法です:http://www.utf8everywhere.org

于 2012-08-12T20:02:40.610 に答える
1

ICU は現在Unicodeライブラリです。クロスプラットフォームの Unicode サポートが必要な場合は、基本的に ICU でしか入手できません。

そのインターフェースが、自動散弾銃の間違った端よりも不親切でなかったら.

于 2012-08-12T14:11:49.400 に答える
1

http://site.icu-project.orgはもうチェックしましたか?

于 2012-08-12T14:07:47.933 に答える
0

これを行うためにwxWidgetsを使用しました。これにより、std::string から文字列型 wxString への変換が容易になります。理想的ではありませんが、うまく機能し、シンプルで移植性があります。

于 2012-08-12T14:24:23.347 に答える