У меня есть приложение Linux C ++, которое запускает следующее:
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 в wstring, но приведенный выше код возвращает этот результат:
mbstowcs results: rc = 18446744073709551615
str:¡Hola!
wstr:
iconv_open errno = 2
iconv results: rc = 0
str:¡Hola!
wstr:�Hola!
iconv result конвертирует первый символ в другой.
Примечание: если я заменю WCHAR_T в UCS-4 -INTERNAL, wstr ничего не содержит.
любая помощь?
спасибо!