将字符串序列化为UTF无BOM

时间:2014-02-10 21:05:38

标签: c++ c encoding utf-8

我正在尝试将unicode字符串序列化编码为UTF-8 w / o 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);
}

1 个答案:

答案 0 :(得分:0)

WideCharToMultiByte(CP_UTF8, 0, pszText, utf8len, pszConverted, utf8len, 0, 0);

WideCharToMultiByte(cchWideChar)的第四个参数是输入字符串的大小。你应该把它留给-1,因为它是空终止的。否则,您的输出缓冲区可能不够大,并且它将包含太多数据。