0

マルチバイト (UTF) 文字列を Widechar 文字列に変換しようとしていますが、mbsnrtowcs は常に失敗します。入力文字列と予想される文字列は次のとおりです。

char* pInputMultiByteString = "A quick brown Fox jumps \xC2\xA9 over the lazy Dog.";
wchar_t* pExpectedWideString = L"A quick brown Fox jumps \x00A9 over the lazy Dog.";    

特殊文字は著作権記号です。

Windows の MultiByteToWideChar ルーチンを使用すると、この変換は正常に機能しますが、その API は Linux では使用できないため、mbsnrtowcs を使用する必要があります。これは失敗しています。他のキャラクターも試してみましたが、いつも失敗します。唯一の期待は、ASCII ベースの入力文字列のみを使用すると、mbsnrtowcs が正常に動作することです。私は何を間違っていますか?

4

3 に答える 3

1

UTFはマルチバイト文字列ではありません(ただし、Unicode文字は1バイト以上を使用して表されることは事実です)。マルチバイト文字列は、特定のコードページを使用して文字を表す文字列であり、一部の文字列は複数のバイトを使用します。

ANSI文字とUTF文字を組み合わせているので、UTF8を使用する必要があります。

したがって、UTFをwchar_t(WindowsではUTF16、LinuxではUTF32)に変換しようとするmbsnrtowcsことはできません。

UTF8を使用する場合は、そのためのUNICODE処理ライブラリを調べる必要があります。ほとんどのタスクでは、http: //utfcpp.sourceforge.net/のUTF8-CPPを使用することをお勧めします。

ウィキペディアでUNICODEとUTF8の詳細を読むことができます。

于 2012-11-10T12:40:23.053 に答える
0

解決策: デフォルトでは、各 C プログラムは "C" ロケールを使用するため、setlocale(LCTYPE,"").."" を呼び出す必要がありました。これは、環境のロケール、つまり en_US.utf8 を使用し、変換が機能することを意味します。

于 2012-12-27T22:50:31.327 に答える
0

MultiByteToWideChar にはコード ページを指定するパラメーターがありますが、mbsnrtowcs にはありません。Linux では、ロケールで LC_CTYPE を設定して UTF-8 を指定していますか?

于 2012-11-07T00:38:40.277 に答える