用c++将UTF8字符串转换为UTF16字符串
convert a UTF8 string to a UTF16 string in c++
我使用的是VC 6.0。我的项目是用Unicode编译的。我使用zlib 1.1.3来膨胀一个包含UTF-8字符串的文件。我得到的是ASCII,但我保证它都是英文的,所以我可以把它作为一个UTF8字符串(我可以吗?)。
我在Codeproject中使用了以下建议功能:
WCHAR* SMUUTF8toUTF16(LPCSTR utf8, int* pLen)
{
WCHAR *ptr = NULL;
*pLen = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
if (*pLen>1)
{
ptr = (WCHAR*)malloc(*pLen);
if (ptr)
{
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, ptr, *pLen);
}
}
return ptr;
}
我的代码由于以下错误而变得不稳定:1.检测到严重错误c00003742.w3wp.exe(NTDLL.DLL)中的首次机会异常:0xC0000005:访问冲突。
我怀疑是内存泄漏或引用了错误的指针,因为在使用此函数时,我会遇到很多上面提到的错误。我的测试还表明,当我不使用它时,堆会保持良好的形式,不会损坏。
你能为这个问题提出一个更好的实施方案吗?
MultiByteToWideChar
返回输出中的16位Unicode字符数——而不是字节数。但是malloc
需要字节数。您必须将字符数乘以字符的字节大小,否则您只分配了所需字节数的一半!
ptr = (WCHAR *)malloc(sizeof(WCHAR) * *pLen);
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组