почему UChar * не работает с этим преобразованием ICU? - PullRequest
0 голосов
/ 11 мая 2011

При преобразовании из UTF-8 в ISO-8859-6 этот код не работал:

UnicodeString ustr = UnicodeString::fromUTF8(StringPiece(input));

const UChar* source = ustr.getBuffer();

char target[1000];
UErrorCode status = U_ZERO_ERROR;
UConverter *conv;
int32_t     len;

// set up the converter
conv = ucnv_open("iso-8859-6", &status);
assert(U_SUCCESS(status));

// convert 
len = ucnv_fromUChars(conv, target, 100, source, -1, &status);
assert(U_SUCCESS(status));

// close the converter
ucnv_close(conv);

string s(target);
return s;

изображения: ( 1 , 2 )

Однако при замене UChar * жестко закодированным UChar [] это работает хорошо !! image: ( 3 )

1 Ответ

0 голосов
/ 11 мая 2011

Похоже, вы выбираете трудный подход.Как насчет этого:

static char const* const cp = "iso-8859-6";
UnicodeString ustr = UnicodeString::fromUTF8(StringPiece(input));
std::vector<char> buf(ustr.length() + 1);
std::vector<char>::size_type len = ustr.extract(0, ustr.length(), &buf[0], buf.size(), cp);
if (len >= buf.size())
{
    buf.resize(len + 1);
    len = ustr.extract(0, ustr.length(), &buf[0], buf.size(), cp);
}
std::string ret;
if (len)
    ret.assign(buf.begin(), buf.begin() + len));
return ret;
...