我有一个c ++函数,它应该将utf-8转换为windows代码页1252.这个函数适用于所有可以转换为ascii的函数。
但是,如果我使用中文字符(例如)芬,它根本不会转换它,因此out缓冲区(utf8_tmpbuf)中的结果就是之前的结果。
static void Utf8CharToLatin(char* src, char* dest)
{
size_t srclen = 1;
size_t dstlen = 10;
char source[10];
strcpy( source, src);
srclen = strlen(source);
source[srclen+1] = '\0';
utf8_tmpbuf[0] = ' ';
char * pIn = source;
char * pOut = ( char*)utf8_tmpbuf;
if (srclen == 0) return;
srclen++;
// Convert to Latin
iconv_t conv = iconv_open("CP1252","UTF-8//TRANSLIT");
iconv(conv, &pIn, &srclen, &pOut, &dstlen);
iconv_close(conv);
sprintf(dest,"%s", utf8_tmpbuf);
return;
}
在这个版本中,我强制将utf8_tmpbuf [0]作为一个空格,以便我可以在之后测试如果代码点大于127且结果是空格,则它是一个无法转换为ascii的字符。 / p>
有其他人看到过这种行为吗?