Как я могу преобразовать из символа ANSI (char) в символ Unicode (wchar_t) и наоборот? - PullRequest
2 голосов
/ 07 сентября 2011

Как я могу преобразовать из символа ANSI (char) в символ Unicode (wchar_t) и наоборот?

Есть ли кроссплатформенный исходный код для этой цели?

Ответы [ 3 ]

6 голосов
/ 07 сентября 2011

Да, в <cstdlib> у вас есть mbstowcs() и wcstombs().

Я ранее опубликовал код о том, как использовать это, может быть, это полезно. Убедитесь, что вы запустили функцию дважды, один раз, чтобы получить длину, и один раз, чтобы выполнить фактическое преобразование. (Вот небольшая дискуссия о том, что означают функции.) Вместо ручного массива char я, вероятно, предпочел бы std::vector<char> или std::vector<wchar_t>, если подумать об этом.

Обратите внимание, что wchar_t не имеет ничего общего с Unicode. Если вам нужен Unicode, вам необходимо выполнить дальнейшее преобразование из wchar_t в Unicode, используя отдельную библиотеку (например, iconv()), и не используйте wchar_t в качестве типа данных для кодовых точек Unicode. Вместо этого используйте uint32_t в устаревших системах или char32_t в современных.

1 голос
/ 07 сентября 2011

Очевидно, это работает, я не знаю, будет ли это работать всегда или это совпадение, но я подумал, что это стоит показать:

const char* c = "hey yo";
wstring s(c, c + 6);

wcout << s << endl;
wcin.get();

печать

hey yo
0 голосов
/ 07 сентября 2011

Посмотрите на библиотеки как ICU и iconv , если вы действительно используете Unicode, а не только 16-битные символы. То есть Unicode имеет дело не только с одиночными символами, даже с 16-битными, как обычный wchar_t.

...