使用 iconv 进行 UTF8 转换的输出不正确
Incorrect output for UTF8 conversion using iconv
我正在尝试将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 函数都没有抛出错误。
谁能帮我弄清楚我是否在这里遗漏了什么?
您可以使用utfcpp library: http://utfcpp.sourceforge.net/或Boost.Locale来实现此目的
这是iconv的一个错误,因为0xc2 0x80
是字形U+0080
的有效utf-8序列。
此字形经常被误认为是字形EURO SIGN,代码点U+20AC
UTF-8 编码为0xe2 0x82 0xac
。
相关文章:
- Windows 10命令提示符的输出不正确
- C++ - 为什么 unicode 输出不正确?
- 我的叉子输出不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 当行数和列不匹配时,输出不正确
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 上一个较大的数字代码中的输出不正确
- 二进制搜索树的输出不正确
- 拆解输出不正确(BeaEngine)
- 最大输出不正确
- 基本合并排序中的输出不正确
- 更改声明顺序时输出不正确
- Base64 转换器的输出不正确
- 使用 find_first_of() 和 substr() 分隔字符串,但我得到的输出不正确
- 对字符串进行索引时输出不正确
- .wav C++数据输出不正确