私が理解しているように、ロケールごとにエンコーディングが異なります。ICU では、UnicodeString から現在のロケールのエンコーディングに変換したり、その逆に変換したりしたいと考えています。具体的には、Boost の Filesystem ライブラリを使用しています。これは、Windows の UTF-16 または Linux の UTF-8 エンコーディングを使用します。
ICUまたは別のライブラリを使用してこれを確実に行う方法はありますか?
ICU を使用することもできますがiconv()
、セットアップと操作がはるかに簡単で十分な場合があります (また、Posix の一部であり、Windows で簡単に利用できます)。
どちらのライブラリでも、Unicode 文字列をワイド文字列に変換する必要があります。そのiconv()
ターゲットでは と呼ばれWCHAR_T
ます。ワイド文字を取得したら、Windows で直接使用できます。
Linux では、wcstombs()
ワイド文字をシステム (およびロケール) のナロー文字マルチバイト エンコーディング (忘れないでくださいsetlocale(LC_CTYPE, "");
) に変換するために使用するか、または、システムの文字ではなく UTF-8 が必要であることが確実な場合に使用できます。エンコーディングを使用すると、元の文字列から UTF-8 に直接変換できます (いずれかのライブラリでも)。
たぶん、私のこの投稿が背景を提供するために見つかるでしょう。
iconv を使用します。http://www.gnu.org/s/libiconv/documentation/libiconv/iconv.1.html ほとんどの GNU システムにプリインストールされています。