Сериализация строки в UTF без спецификации

0

Я пытаюсь кодировать сериализацию строки Юникода в UTF-8 без BOM файла. По какой-то причине приведенный ниже код дает неправильный вывод.

static void MyWriteFile(HANDLE hFile, PTCHAR pszText, int cchLen, BOOL bAsUnicode)
{
  DWORD dwBytes;
  size_t utf8len = WideCharToMultiByte(CP_UTF8, 0, pszText, -1, NULL, 0, NULL, NULL);
  PCHAR pszConverted = (PCHAR)LocalAlloc(LPTR, utf8len);

  WideCharToMultiByte(CP_UTF8, 0, pszText, utf8len, pszConverted, utf8len, 0, 0);
  WriteFile(hFile, pszConverted, utf8len, &dwBytes, NULL);
}
Теги:
utf-8
encoding

1 ответ

0
Лучший ответ
WideCharToMultiByte(CP_UTF8, 0, pszText, utf8len, pszConverted, utf8len, 0, 0);

Четвертый параметр WideCharToMultiByte (cchWideChar) - это размер входной строки. Вы должны оставить это для -1, поскольку оно завершено нулем. В противном случае буфер вывода будет, вероятно, недостаточно большим, и он будет содержать слишком много данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню