附录我自己的初步答案出现在问题的底部。
我是一个古老的VC6 C ++ / MFC项目转换为VS2013和Unicode的基础上,建议在utf8everywhere.org。
一路上,我一直在研究 Unicode、UTF-16、UCS-2、UTF-8、Unicode 和 UTF-8 的标准库和 STL 支持(或者,更确切地说,标准库缺乏支持)、ICU、Boost .Locale,当然还有需要 UTF-16 的 Windows SDK 和 MFC 的 API wchar
。
在我研究上述问题的过程中,一个问题不断出现,我无法以清晰的方式回答我满意的问题。
考虑 C 库函数mbstowcs
。此函数具有以下签名:
size_t mbstowcs (wchar_t* dest, const char* src, size_t max);
Run Code Online (Sandbox Code Playgroud)
第二个参数src
是(根据文档)a
带有要解释的多字节字符的 C 字符串。多字节序列应从初始移位状态开始。
我的问题是关于这个多字节字符串。我的理解是多字节字符串的编码可能因字符串而异,并且标准未指定编码。MSVC 文档似乎也没有为此函数指定特定的编码。
我此时的理解是,在 Windows 上,这个多字节字符串应该使用活动语言环境的 ANSI 代码页进行编码。但我的清晰度在这一点上开始消退。
我一直想知道源代码文件本身的编码是否会对的行为产生影响mbstowcs
,至少在 Windows 上。 而且,对于上面的代码片段,我也对编译时发生的情况与运行时 …