私が理解しているように、異なるロケールには異なるエンコーディングがあります。 ICUでは、UnicodeStringから現在のロケールのエンコーディングに変換して戻したいと思います。具体的には、Boostのファイルシステムライブラリを使用しています。これは、WindowsのUTF-16またはLinuxのUTF-8エンコーディングを使用します。ICU C++エンコーディングの変換
ICUや別のライブラリを使用して確実に行う方法はありますか?
私が理解しているように、異なるロケールには異なるエンコーディングがあります。 ICUでは、UnicodeStringから現在のロケールのエンコーディングに変換して戻したいと思います。具体的には、Boostのファイルシステムライブラリを使用しています。これは、WindowsのUTF-16またはLinuxのUTF-8エンコーディングを使用します。ICU C++エンコーディングの変換
ICUや別のライブラリを使用して確実に行う方法はありますか?
あなたはICUを使うことができますが、セットアップと操作がはるかに簡単です(Posixの一部で、Windowsで簡単に利用できます)iconv()
で十分です。
どちらのライブラリでも、ユニコード文字列をワイド文字列に変換する必要があります。 iconv()
では、そのターゲットはWCHAR_T
と呼ばれます。ワイド文字を取得したら、Windowsで直接使用することができます。
Linuxでは、あなたはあなたがUTFをしたいことが確実な場合は、代わりに、(setlocale(LC_CTYPE, "");
を忘れないでください)システムの(およびロケールの)狭い文字マルチバイトエンコーディングにワイド文字を変換するためにwcstombs()
を使用するように進めるか、どちらか-8では、元の文字列からUTF-8に直接変換することもできます(どちらのライブラリでも)。
多分this post私のいくつかの背景を提供する見つけるでしょう。
私はUnicode用の文字列クラスを作成しなければならないでしょうか? – Jookia
生コードポイント文字列には 'std :: vector
UTF-8文字列ライブラリを見つけるのは賢明でしょうか? ASCIIセット、またはその上のBMPよりも高くなります)、それにiconvのものを追加しますか? – Jookia
iconvを使用します。 http://www.gnu.org/s/libiconv/documentation/libiconv/iconv.1.html これはGNUシステムのほとんどにあらかじめインストールされています。
ICUは非常に重いライブラリーですが、おそらくこの単純なタスクのためには過剰です。 Linuxでは 'libiconv'、Windowsでは' WideCharToMultiByte'と 'MultiByteToWideChar'を考慮したいかもしれません。本当にしたいのなら、あなたもICUを使うことができます。 –
ああ。私はわかりません、私はアプリケーションでUnicodeをサポートしたいだけです。 – Jookia
[ICU UnicodeStringからロケールへのエンコーディング]の可能な複製(http://stackoverflow.com/questions/7370679/icu-unicodestring-to-locale-encoding) – tchrist