0

我正在阅读一个包含数千个非英语字符串的文件,其中许多是东亚人,使用fgets,然后调用MultiByteToWideChar将它们转换回 Unicode:

WCHAR wstr[BUFSIZ] = { '\0' };
int result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, src, -1, wstr, BUFSIZ);

这种方法几乎在所有情况下都可以正常工作。它不起作用的两个字符串

我爱你  (read in by fgets as "我爱ä½")
コム    (read in by fgets as "コãƒ")

在这两种情况下,调用MultiByteToWideChar返回零,最后一个字符wstr是垃圾:

我爱�  (final character xE4xBD)
コ�    (final character xE3x83)

是否有一些环境设置或读取我的文本文件的替代方式可以消除这个问题?

4

1 回答 1

0

我发现了问题,这要归功于 Raymond Chen 的观察,即源字符串中的字节数对于我爱你和 コム 是不正确的。

我正在调试的代码会修剪fgets为空格读取的字符串,这最终会破坏它们,因为我爱你和 コム 的 ASCII 版本显然都以空格结尾。

于 2020-12-24T17:41:31.310 回答