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不包含任何内容。
任何帮助?
谢谢!
没有找到相关结果
已邀请:
2 个回复
赐黄
鲁釜头
)不被编码为多字节字符串 - 它更可能是一个简单的ANSI字符串,使用你的本地/当前代码页来表示
。换句话说:在你现有的字符串中(使用
)
存储在单个字节中,其值大于127.
但是可能会使用2个字节来表示正确的
(现在没有检查这个) )和你的
使用的值甚至可能是不期望/允许的。 我希望错误发生在那里因为
应该返回转换后的字符串中的字符数 - 但“18446744073709551615”太长了。如果这是真的,那么在使用正确的文本定义自己的宽字符串并使用该字符串时,您也应该能够正确使用iconv(
)。