【发布时间】:2011-08-07 06:43:21
【问题描述】:
可能重复:
How to create a UTF-8 string literal in Visual C++ 2008
是否可以强制 Visual Studio 默认对所有字符串使用 UTF-8 编码?
例如有
wchar_t *txt="hello";
utf8编码
【问题讨论】:
标签: c++ visual-studio visual-studio-2008 visual-c++ wchar-t
可能重复:
How to create a UTF-8 string literal in Visual C++ 2008
是否可以强制 Visual Studio 默认对所有字符串使用 UTF-8 编码?
例如有
wchar_t *txt="hello";
utf8编码
【问题讨论】:
标签: c++ visual-studio visual-studio-2008 visual-c++ wchar-t
这篇博文看起来很有前景:UTF-8 strings and Visual C++
大部分重要内容仍然存在,尽管有些图片已损坏。简而言之:
第一步,您必须确保源文件使用字节顺序标记 (BOM) 进行 UTF-8 编码。 BOM 是极其重要的东西,没有它,C++ 编译器将无法正常运行。
在 Visual Studio 2008 中,这可以直接在 IDE 中使用文件菜单中的高级保存命令来完成。将弹出一个对话框。选择带签名的 UTF-8。
如果您编译并运行一个测试程序,[您将不会得到预期的结果。] 发生的情况是,尽管您的文本以 UTF-8 正确编码,但出于兼容性原因,C/C++ 运行时是默认设置为“C”语言环境。此语言环境假定所有 char 都是 1 个字节。嗯。亲爱的,UTF-8 并非如此!
您需要使用
setlocale函数更改语言环境,以使输入输出流处理器正确解释字符串。在我们的例子中,无论系统使用什么语言环境都可以,这是通过传递“”作为第二个参数来完成的。
为了严谨,一定要检查setlocale的返回值,如果返回0,说明出错。在多语言应用程序中,您需要更精确地使用 setlocale,明确提供您想要使用的语言环境(例如,您可能希望您的应用程序在日语计算机上显示俄语文本)。
我不知道有什么好方法可以将其设为默认值。我很确定这是不可能的。如果您要为 Unicode 编译,Windows 应用程序强烈更喜欢 UTF-16。如果可能,您应该转换为该格式。
否则,我能想到的最佳选择是定义一个简单的宏(类似于 Windows 标头中定义的 _T("string")),使用上述逻辑转换为 UTF-8。
【讨论】: