Windowsのwchar_tとGCC / Linuxの間で(プログラムである必要はありません)変換する方法は?
質問
このWindows wchar_t文字列があるとします:
L"\x4f60\x597d"
and
L"\x00e4\x00a0\x597d"
そして、それを(必ずしもプログラム的にではなく、一度限りのものになります)GCC / Linux wchar_t形式(UTF-32 AFAIK)に変換したいと思います。どうすればいいのですか? (一般的な説明はいいですが、この具体的なケースに基づいた例も役立ちます)
文字変換サイトに誘導しないでください。 L" \ x(something)"から変換したい「終了文字」ではなく、フォームフォーム。
解決
文字変換に最もよく使用されるライブラリの1つは、ICUライブラリ http://icu-project.org/です。 たとえばいくつかのブースト http://www.boost.org/ ライブラリで使用されています。
他のヒント
UTF-16(Visual C ++ wchar_t
形式)からUTF-8に変換してから、UTF-8からUCS-4(GCC wchar_t
形式に変換する可能性があります) )、受け入れられる答えになりますか?
その場合、Windowsでは、 WideCharToMultiByte
関数( CodePage
パラメーターに CP_UTF8
を使用)を使用できます。変換。次に、結果のUTF-8文字列をプログラムに直接貼り付けるか、さらに変換することができます。 ここは、その方法を示すメッセージです一人がやった。独自のコードを記述するか、手動で行うこともできます(UTF-8をUCS-4に正確に変換する方法に関するセクションを含む公式仕様は、こちら)。もっと簡単な方法があるかもしれませんが、私はまだLinuxの変換についてあまり詳しくはありません。
\ xD800と\ xDFFFの間の文字についてのみ心配する必要があります。他のすべての文字は、ゼロで埋められたときにUTF-16からUCS-4にまったく同じようにマップする必要があります。
Ignacioは正しいです。いくつかの珍しい漢字(またはいくつかの絶滅したスクリプト)を使用しない場合、マッピングは1対1です。 (公式の" lingo"は" BMP以外のキャラクターがいない場合です")
これは、念のためのアルゴリズムです: http://unicode.org/faq/utf_bom.html#utf16-3 しかし、実際のケースではほとんど役に立たないでしょう。
Unicodeの無料ソース( ftp://ftp.unicode.orgも使用できます。 / Public / PROGRAMS / CVTUTF )