我需要将 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);
这行不通。结果包含“?” 我输入的任何字符都高于 ASCII。状态没有错误。我究竟做错了什么?
最重要的是,我在编译库 4.4 版时遇到了麻烦,因为 MSVC 9 项目不会转换为 MSVC 10 项目。
我也知道 libiconv 开源库。我无法在 Windows 上编译那个。如果有人对不同的图书馆有任何建议,也欢迎。
谢谢。
编辑 我最初使用的转义序列是错误的。所以现在 ICU 接受字符串,去掉转义序列——这是朝着正确方向迈出的一步。但结果仍然包含“?” 字符。
EDIT2我无法转换为 MSVC 10 项目的原因是没有安装 x64 平台(默认情况下不是)。或者,我可以在文本编辑器中打开所有项目并删除所有提及的 x64 目标。