ICU4Cは、Windows、Linux、Mac-OSXでビルドされたC++ソフトウェアで使用します。 私はMac OSXの下でのみ問題があり、UTF16とWCS(u_strToWCSを呼び出す)の間の変換にのみ関連しています。 ユニコードされた文字は固定された文字に置き換えられます。UTF16とWCS(OS-Xのみ)の間の変換に関するUnicode ICU4Cの問題
ICU4Cのバージョンは問題ではありません:私は最後の昨日を試してみます。
Mac OS-Xは10.6.6(Snow Leopard)、GCC:i686-apple-darwin10-gcc-4.2.1です。
また、共有ライブラリと静的ライブラリを変更せずに切り替えようとしています。
私は以下のコードで問題を再現します。変数 "c1"、 "c2"、 "c3"を見てください。WindowsとLinuxは同じ結果をもたらしますが、Mac OS-Xはありません(私の問題)。
コンパイルに問題があるのか、icuのバグなのか、何か分かりません。
誰でも私に方向性を示唆したり、少なくとも私のテスト結果を確認してくれることを願っています。
ありがとうございました。
// Manually construct UTF16 buffer of this string: http://pastebin.com/HW06TaA9
unsigned char* pSource = new unsigned char[28];
pSource[0] = 84;
pSource[1] = 0;
pSource[2] = 101;
pSource[3] = 0;
pSource[4] = 115;
pSource[5] = 0;
pSource[6] = 116;
pSource[7] = 0;
pSource[8] = 32;
pSource[9] = 0;
pSource[10] = 179;
pSource[11] = 111;
pSource[12] = 128;
pSource[13] = 149;
pSource[14] = 121;
pSource[15] = 114;
pSource[16] = 43;
pSource[17] = 82;
pSource[18] = 76;
pSource[19] = 136;
pSource[20] = 63;
pSource[21] = 101;
pSource[22] = 64;
pSource[23] = 83;
pSource[24] = 125;
pSource[25] = 0;
pSource[26] = 0;
pSource[27] = 0;
int32_t nChars = 100;
wchar_t* pDest = new wchar_t[nChars];
memset(pDest, 0, nChars * sizeof(wchar_t));
UErrorCode status = U_ZERO_ERROR;
u_strToWCS(pDest, nChars, &nChars, (const UChar*) pSource, -1, &status);
if(U_SUCCESS(status))
{
wchar_t c1 = pDest[2]; // Ascii char. Win: 115, Linux: 115, OS-X: 115
wchar_t c2 = pDest[5]; // Japan char. Win: 28595, Linux: 28595, OS-X: 26
wchar_t c3 = pDest[6]; // Japan char. Win: 38272, Linux: 38272, OS-X: 26
}
これもhttp://bugs.icu-project.org/trac/ticket/8894に提出されています。 –
よろしくお願いします。 –