Мне нужно преобразовать несколько байтов в ISO-2022-JP и ISO-2022-JP-2 (и других вариациях ISO-2022) в Unicode. Я пытаюсь использовать ICU ( текст ссылки ), но следующий код не работает.
std::string input = "\x1B\x28\x4A" "ABC\xA6\xA7"; //the first 3 chars are escape sequence to use JIS_X201 character set in GL/GR
UErrorCode status = U_ZERO_ERROR;
UConverter *conv;
// set up the converter
conv = ucnv_open("ISO-2022-JP", &status);
if (status != U_ZERO_ERROR) return false; //couldn't find character set
UChar * convDest = new UChar[2*input.length()]; //ucnv_toUChars will use up to 2*length
// convert to Unicode
int resultLen = (int)ucnv_toUChars(conv, convDest, 2*input.length(), input.c_str(), input.length(), &status);
Это не работает. Результат содержит '?' charcters для всего, что я положил в это выше ASCII. В статусе нет ошибок. Что я делаю не так?
Кроме того, у меня возникли проблемы при компиляции библиотеки версии 4.4, поскольку проект MSVC 9 не будет преобразован в проект MSVC 10.
Мне также известна библиотека с открытым исходным кодом libiconv. Я не мог скомпилировать это на окнах. Если у кого-нибудь есть какие-либо советы по поводу другой библиотеки, это тоже приветствуется.
Спасибо.
EDIT
Последовательность побега, которую я первоначально использовал, была неправильной. Так что теперь ICU берет строку, удаляет escape-последовательность - это шаг в правильном направлении. Но результат все еще содержит «?» символы.
EDIT2 Причина, по которой я не смог перейти на проект MSVC 10, заключалась в том, что платформа x64 не была установлена (она не установлена по умолчанию). В качестве альтернативы я могу открыть все проекты в текстовом редакторе и удалить все упоминания о цели x64.