Unicode ICU4C проблема о преобразовании между UTF16 и WCS (только OS-X) - PullRequest
0 голосов
/ 19 октября 2011

Я использую ICU4C в программном обеспечении C ++, построенном под Windows, Linux и Mac-OSX. У меня проблема ТОЛЬКО под Mac-OSX, и она связана только с преобразованием между UTF16 и WCS (вызов u_strToWCS). Просто unicoded символы заменяются фиксированным символом.

Версия 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, или whatelse.

Надеюсь, кто-нибудь может подсказать мне направление или хотя бы подтвердить результаты моего теста.

Спасибо.

    // 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
    }

1 Ответ

0 голосов
/ 09 ноября 2011

Смотрите эту ошибку.Это было уже исправлено в последней ICU, и я включил обходной путь.https://ssl.icu -project.org / ПРОФ / билет / 8894 # Комментарий: 4

...