我对 Visual Studio 中的“字符集”选项有疑问。字符集选项包括:
- 没有设置
- 使用 Unicode 字符集
- 使用多字节字符集
我想知道字符集中三个选项有什么区别?
另外如果我选择其中的一些,会影响对英语以外的语言(如RTL语言)的支持吗?
我对 Visual Studio 中的“字符集”选项有疑问。字符集选项包括:
我想知道字符集中三个选项有什么区别?
另外如果我选择其中的一些,会影响对英语以外的语言(如RTL语言)的支持吗?
它是一种兼容性设置,适用于为未启用 Unicode 的旧版本 Windows 编写的遗留代码。Windows 9x 系列中的版本,Windows ME 是最后一个被广泛忽视的版本。选择“未设置”或“使用多字节字符集”后,所有将字符串作为参数的 Windows API 函数都重新定义为一个小的兼容性帮助函数,该函数将char*
字符串转换wchar_t*
为 API 的原生字符串类型。
此类代码严重依赖于默认系统代码页设置。代码页将 8 位字符映射到选择字体字形的 Unicode。只有当运行您的代码的机器具有正确的代码页时,您的程序才会生成正确的文本。如果代码页不匹配,值 >= 128 的字符将呈现错误。
始终为现代代码选择“使用 Unicode 字符集”。特别是当您想要支持从右到左布局的语言并且您没有在您的开发机器上选择阿拉伯语或希伯来语代码页时。在您的代码中使用std::wstring
或。获得实际的 RTL 布局需要在调用中wchar_t[]
打开WS_EX_RTLREADING
样式标志。CreateWindowEx()
汉斯已经回答了这个问题,但我发现这些设置有奇怪的名字。(究竟什么没有设置,为什么其他两个选项听起来如此相似?)关于:
Difference between MBCS and UTF-8 on Windows goes into these issues in a lot more detail.