【发布时间】:2015-10-23 19:39:38
【问题描述】:
这是我的代码:
WCHAR msg[] = L"ReplaceFile:";
::WriteFile( hFile, msg, lstrlenW(msg) * sizeof(WCHAR), &nBytes, NULL );
我使用 OPEN_ALWAYS 模式创建了这个文件,我将向这个文件写入一些 const 字符串。该文件显示“ReplaceFile”,如下所示: R e p l a c e F i l e.
谁能告诉我如何使它正常,为什么? 提前致谢。
【问题讨论】:
-
宽字符,例如带有
L前缀的字符,每个字符占用 2 个字节(在 Windows 上)。您需要将字符串更改为适用于字节级别的不同编码,例如您的语言环境的 Windows 默认代码页。 -
更好的选择是 UTF-8。远离使用语言环境存储字符串。
-
请定义“正常”。 UTF16 对我来说很正常。
-
@MarkRansom:在 UTF-16 中,宽字符每个字符(代码点)占用 2 或 4 个字节。您将 codepoint 与 codeunit 混淆了。使用 UTF-16 编码单元占用 2 个字节。
-
@RemyLebeau 除非您知道将如何使用该文件,否则您不能做出这样的笼统声明。如果您将它提供给另一个 Windows 应用程序,那么 UTF-8 很有可能无法正常工作。我也希望全世界都对 UTF-8 进行标准化,但有时你别无选择,只能捏着鼻子。
标签: c++ windows winapi unicode