可能重复:
How to create a UTF-8 string literal in Visual C++ 2008在Visual Studio 2008中默认情况下是否可以使用UTF-8编码?
是否有可能迫使Visual Studio中使用UTF-8编码默认情况下,所有的字符串?
例如已经
wchar_t *txt="hello";
编码UTF8
可能重复:
How to create a UTF-8 string literal in Visual C++ 2008在Visual Studio 2008中默认情况下是否可以使用UTF-8编码?
是否有可能迫使Visual Studio中使用UTF-8编码默认情况下,所有的字符串?
例如已经
wchar_t *txt="hello";
编码UTF8
此博客文章看起来很有希望:UTF-8 strings and Visual C++
大部分的重要内容仍然存在,即使一些图片是破碎。总之:
第一步,你必须确保源文件是UTF-8编码的字节顺序标记(BOM)。 BOM是一件非常重要的事情,如果没有它,C++编译器将无法正常工作。
在Visual Studio 2008中,可以使用位于文件菜单中的高级保存命令从IDE直接完成此操作。一个对话框将弹出。选择带签名的UTF-8。
如果您编译并运行测试程序,[您不会获得预期的结果]。会发生什么情况是,尽管您的文本使用UTF-8正确编码,但出于兼容性考虑,C/C++运行时默认情况下设置为“C”语言环境。该区域假定所有char都是1个字节。呃。亲爱的UTF-8并非如此!
您需要使用
setlocale
函数更改语言环境,以使输入输出流处理器正确解释字符串。在我们的例子中,任何系统使用的语言环境都很好,这是通过“”作为第二个参数完成的。
严格来说,您必须检查setlocale的返回值,如果返回0,则发生错误。在多语言应用程序中,您需要更精确地使用setlocale,明确提供您想要使用的语言环境(例如,您可能希望让应用程序在日语计算机上显示俄语文本)。
我不知道什么好办法,使这个默认值。我很确定这是不可能的。 Windows应用程序强烈更喜欢UTF-16,如果您正在编译为Unicode。如果可能的话,你应该转换为该格式。
否则,我可以想出的最佳选择是定义一个简单的宏(类似于Windows头文件中定义的_T("string")
),使用上述逻辑转换为UTF-8。
我没有问题,但是,据我所知,在Visual Studio中的UNICODE == UTF16。是否可以强制UTF-8编码字符串,如L“hello”? – Grim 2011-04-17 11:33:12
@Kostya:你说得对。答案已更新。 – 2011-04-17 11:35:23