Windowsのwchar_tとGCC / Linuxの間で(プログラムである必要はありません)変換する方法は?

StackOverflow https://stackoverflow.com/questions/236125

  •  04-07-2019
  •  | 
  •  

質問

この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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top