MultiByteToWideChar 处理 UTF8 字符串的时候,会出现一些奇怪的现象,请问如何解决?

2018-03-19 08:57:48 +08:00
 mingl0280
发生情况:一个全角的符号(感叹号,单引号之类的)后跟一个空格,例如

! ‘ ’ ! “ ” [ ] = - 0、 。 , ; : …… · (这里的所有引号请用全角)

这种情况下,MultiByteToWideChar 会输出一堆乱码出来 (例如"�?�?�?!�?�?�?�?= - 0 �?�?�?�?�?…�?% · ")

这样的,请问有人知道怎么解决吗?

调用:MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, pWcharTmp, nWcharCnt); //szUTF8 为 const char*的 UTF8 字面量
1523 次点击
所在节点    问与答
2 条回复
ysc3839
2018-03-19 12:29:57 +08:00
UTF-8 可以直接转 UTF-16 的,不需要调用系统 API。
ysc3839
2018-03-19 12:48:47 +08:00
另外经过测试并没有你说的问题。
代码:

```
#include <Windows.h>
#include <stdio.h>

int main()
{
const char* szUTF8 = u8"! ‘ ’ ! “ ” [ ] = - 0、 。 , ; : …… · ";

int len = MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, NULL, 0);

wchar_t *buf = (wchar_t *)malloc(len);

MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, buf, len);

FILE *f = fopen("UTF-16.txt", "wb");
fwrite(buf, len, 1, f);
fclose(f);

free(buf);

return 0;
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439233

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX