我正在尝试将 ISO-8859-1中编码的字符串转换为Linux上的UTF-8 。我正在使用 iconv 函数在C ++中执行此操作。这是我的代码:
//Conversion from ISO-8859-1 to UTF-8
iconv_t cd = iconv_open("UTF-8","ISO-8859-1");
char *input = "€"; // the byte value is 128 in ISO-8859-1
char *inputbuf= input;
size_t inputSize=1;
char *output = (char*)malloc(inputSize*4); // maximum size of a character in UTF8 is 4
char *outputbuf = output;
size_t outputSize = inputSize*4;
//Conversion Function
iconv (cd, &inputbuf, &inputSize, &outputbuf, &outputSize);
//Display input bytes(ISO-8859-1)
cout << "input bytes(ISO-8859-1):"
for (int i=0; i<inputSize; i++)
{
cout <<(int) *(input+i) << ", ";
}
cout<< std::endl;
//Display Converted bytes(UTF-8)
cout << "output bytes(UTF-8):"
for (int i=0; i<outputSize; i++) //displaying all the 4 bytes allocated
{
cout <<(int) *(output+i) << ", ";
}
cout<< std::endl;
iconv(cd);
这是我观察到的输出:
input bytes(ISO-8859-1): 128
output bytes(UTF-8): 194, 128, 0, 0
如您所见,输出UTF-8转换后的字节194,128。但是,预期的UTF-8输出为226,130,172。我确认任何iconv函数都没有抛出任何错误。
任何人都可以帮我弄清楚我在这里遗失了什么吗?
答案 0 :(得分:0)
您可以使用utfcpp库:http://utfcpp.sourceforge.net/或Boost.Locale用于此目的
答案 1 :(得分:-1)
这是iconv的错误,因为0xc2 0x80
是code point U+0080
glyph <control>的有效utf-8序列。
此字形经常被误认为UTF-8中编码为0xe2 0x82 0xac
的{{3}}。