Зачем использовать MultiByteToWideChar и WideCharToMultiByte одновременно? - PullRequest
1 голос
/ 11 мая 2011

Я видел такой код: Зачем использовать MultiByteToWideChar и WideCharToMultiByte одновременно?

char szLine[MAX_LENGTH_STRING] = {0}
... //some operate to szLine
char *szUtf8string;
wchar_t *szUnicodeString;
int size;
int room;
size = strlen(szLine)+1;
room = MultiByteToWideChar(CP_ACP, 0, szLine, -1, NULL, 0);
szUnicodeString = (wchar_t*) malloc((sizeof(wchar_t))*room);
MultiByteToWideChar(CP_ACP, 0, szLine, -1, szUnicodeString, room);

room = WideCharToMultiByte(CP_UTF8, 0, szUnicodeString, -1, NULL, 0, NULL, NULL);
szUtf8string = (char*) malloc(room);
WideCharToMultiByte(CP_UTF8, 0, szUnicodeString, -1, szUtf8string, room, NULL, NULL);

1 Ответ

5 голосов
/ 11 мая 2011

Этот фрагмент кода сначала преобразует строку из многобайтового представления с использованием системной кодовой страницы по умолчанию в Unicode, а затем преобразует ее в многобайтовое представление UTF-8.Таким образом, он преобразует текст в кодовой странице по умолчанию в представление UTF-8.

Код хрупок, поскольку предполагает, что версия UTF-8 будет только удваиваться в размере (это, вероятно, работает большую часть времени,но хуже всего то, что один байт в кодовой странице по умолчанию может отображаться на 4 байта в UTF-8).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...