将utf-8转换为ascii的c ++ linux iconv有未知行为

时间:2017-08-24 10:58:13

标签: c++ linux utf-8 iconv

我有一个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>

有其他人看到过这种行为吗?

0 个答案:

没有答案