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

#utf-8

#utf-8

Вопрос:

Я видел такой код: зачем использовать 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:

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

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

Комментарии:

1. ПРИВЕТ, спасибо, я обновил код в соответствии с вашим предложением, можете ли вы помочь проверить, все ли в порядке? если я использую vsnprintf (…) для печати «szUtf8string», это приведет к сбою в vsnprintf.