[英]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庫: http ://utfcpp.sourceforge.net/或Boost.Locale用於此目的
這是iconv的錯誤,因為0xc2 0x80
是代碼點U+0080
glyph <control>的有效utf-8序列。
此字形經常被誤認為字形EURO SIGN ,代碼點U+20AC
在UTF-8中編碼為0xe2 0x82 0xac
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.