簡體   English   中英

使用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庫: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM