我正在尝试将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);
}
最佳答案
WideCharToMultiByte(CP_UTF8, 0, pszText, utf8len, pszConverted, utf8len, 0, 0);
WideCharToMultiByte的第四个参数(cchWideChar)是输入字符串的大小。您应该将其保留为-1,因为它是空终止的。否则,您的输出缓冲区可能不够大,并且将包含太多数据。
关于c++ - 将字符串序列化为不带BOM的UTF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21687890/