c ++使用iconv

从UTF-8转换为wstring 我有一个c ++ linux应用程序,它运行以下:
int main()
{
  using namespace std;
  char str[] = "¡Hola!";

  wchar_t wstr[50];

  size_t rc;

  memset(wstr, 0, sizeof(wstr));

  rc = mbstowcs(wstr, str, 50);

  cout << "mbstowcs results: ";
  cout << "rc = " << rc << endl;
  cout << "str:" << str  << endl;
  wcout << L"wstr:" << wstr  << endl;
  setlocale(LC_CTYPE,"");
  iconv_t cd = iconv_open("WCHAR_T", "UTF-8");
  cout << "iconv_open errno = "<< errno << endl;

  char *s = str;
  char *t = (char *)wstr;
  size_t s1 = strlen(str);
  size_t s2 = 50;

  rc = iconv(cd, &s, &s1, &t, &s2);

  cout << "iconv results: ";
  cout << "rc = " << rc << endl;
  cout << "str:" << str  << endl;
  wcout << L"wstr:" << wstr  << endl;

}
我想将UTF-8 char矢量转换为wstring,但上面的代码返回此结果:
 mbstowcs results: rc = 18446744073709551615
    str:¡Hola!
    wstr:
    iconv_open errno = 2
    iconv results: rc = 0
    str:¡Hola!
    wstr:�Hola!
iconv结果将第一个char转换为另一个char。 注意:如果我在UCS-4 -INTERNAL中替换WCHAR_T,则wstr不包含任何内容。 任何帮助? 谢谢!     
已邀请:
是否可以使用提升? http://www.boost.org/doc/libs/1_46_1/libs/serialization/doc/codecvt.html     
没有查看iconv文档(从来没有使用过它)我希望你的输入(
char str[] = "¡Hola!";
)不被编码为多字节字符串 - 它更可能是一个简单的ANSI字符串,使用你的本地/当前代码页来表示
'¡'
。换句话说:在你现有的字符串中(使用
const char[]
'¡'
存储在单个字节中,其值大于127.
mbstowcs()
但是可能会使用2个字节来表示正确的
'¡'
(现在没有检查这个) )和你的
'¡'
使用的值甚至可能是不期望/允许的。 我希望错误发生在那里因为
mbcstowcs()
应该返回转换后的字符串中的字符数 - 但“18446744073709551615”太长了。如果这是真的,那么在使用正确的文本定义自己的宽字符串并使用该字符串时,您也应该能够正确使用iconv(
wchar_t wstr[] = L"¡Hola!";
)。     

要回复问题请先登录注册