others - 转换ISO-8859-1字符串到UTF-8英寸

我很难找到一个简单的库函数,把C或C 字符串从ISO-8859-1编码转换成UTF-8,我正在读取采用8位ISO-8859-1编码的数据,但是,需要将它转换为utf 8字符串,以便在SQLite数据库中使用。

时间:

如果源编码始终是ISO-8859-1,那么这很简单,这里有一个循环:


unsigned char *in, *out;


while (*in)


 if (*in<128) *out++=*in++;


 else *out++=0xc2+(*in>0xbf), *out++=(*in++&0x3f)+0x80;



为安全起见,需要确保输出缓冲区比输入缓冲区大两倍,或者其中包含大小限制。

对于C++,我使用这个:


std::string iso_8859_1_to_utf8(std::string &str)


{


 string strOut;


 for (std::string::iterator it = str.begin(); it != str.end(); ++it)


 {


 uint8_t ch = *it;


 if (ch < 0x80) {


 strOut.push_back(ch);


 }


 else {


 strOut.push_back(0xc0 | ch >> 6);


 strOut.push_back(0x80 | (ch & 0x3f));


 }


 }


 return strOut;


}



C++03标准不提供直接在特定字符集之间转换的函数。

根据你的操作系统,你可以在Linux上使用iconv (),MultiByteToWideChar(),在Windows上,为字符串转换提供大量支持的库是开放源代码的ICU库。

非常短的C代码,用于解析UTF-8字符串中的UTF-8字符

...