9

UTF-8 およびさまざまな UTF-16 および UTF-32 エンコーディングのいずれかから来る可能性がある Unicode を受け入れるようにプログラムを変更する必要があります。私は Unicode についてあまり知りません (ただし、Joel Spolsky の記事ウィキペディアのページは読んだことがあります)。

現在、 を使用して で入力をstd::istream読み取り、(必要に応じて) に格納しています。そうしたいです。charcharstd::string

  • 上記のエンコーディングをサポートするようにこれを (最小限の労力で) 変更し、
  • 上記のエンコーディングをテストする方法を見つけます (私はちょっと白パンのアメリカ人で、別のエンコーディングでサンプル テキスト ファイルを作成する方法さえ本当に知りません)。
  • クロスプラットフォームの方法でこれを行います。

また、可能であれば、可能な限りスペースを節約したいと思います (したがって、1 バイト/文字以上必要でない場合は使用しません)。私が理解していることから、これはUTF-8で保存することを意味しますが、これは問題ありませんが、これを行う標準文字列を知りません(私が理解しwchar_tていることから、実装定義のサイズとエンコーディングがあります)。

4

2 に答える 2

2

UTF-8は、主に標準のASCII文字を使用している限り、スペースを節約します。

std :: stringには0バイトがないため、UTF-8では問題ありません。UTF-32のように、入力文字列がNULLバイトの場合、std::stringに入力文字の長さを伝えることができます。std :: stringは、UTF-8文字列の文字数を通知できないため、外部関数を使用する必要があります。

また、charではなくwchar_tを使用したstd :: stringのワイドバージョンがあり、名前を忘れてしまいました。

また、エンコーディング間で変換するためのブーストにはファセットがあります。

ブースト付きの標準ライブラリを使用することもできます。または、Cライブラリの文字列処理関数を使用できます。QtやTclなどのプログラミングフレームワークによって提供される機能もあります。

たとえば、次を参照してください。

utf8codecvtファセット

于 2008-12-24T07:51:17.933 に答える