2011-04-17 105 views

回答

1

此博客文章看起来很有希望:UTF-8 strings and Visual C++

大部分的重要内容仍然存在,即使一些图片是破碎。总之:

  1. 第一步,你必须确保源文件是UTF-8编码的字节顺序标记(BOM)。 BOM是一件非常重要的事情,如果没有它,C++编译器将无法正常工作。

    在Visual Studio 2008中,可以使用位于文件菜单中的高级保存命令从IDE直接完成此操作。一个对话框将弹出。选择带签名的UTF-8。

  2. 如果您编译并运行测试程序,[您不会获得预期的结果]。会发生什么情况是,尽管您的文本使用UTF-8正确编码,但出于兼容性考虑,C/C++运行时默认情况下设置为“C”语言环境。该区域假定所有char都是1个字节。呃。亲爱的UTF-8并非如此!

    您需要使用setlocale函数更改语言环境,以使输入输出流处理器正确解释字符串。

    在我们的例子中,任何系统使用的语言环境都很好,这是通过“”作为第二个参数完成的。

  3. 严格来说,您必须检查setlocale的返回值,如果返回0,则发生错误。在多语言应用程序中,您需要更精确地使用setlocale,明确提供您想要使用的语言环境(例如,您可能希望让应用程序在日语计算机上显示俄语文本)。

我不知道什么好办法,使这个默认值。我很确定这是不可能的。 Windows应用程序强烈更喜欢UTF-16,如果您正在编译为Unicode。如果可能的话,你应该转换为该格式。

否则,我可以想出的最佳选择是定义一个简单的宏(类似于Windows头文件中定义的_T("string")),使用上述逻辑转换为UTF-8。

+2

我没有问题,但是,据我所知,在Visual Studio中的UNICODE == UTF16。是否可以强制UTF-8编码字符串,如L“hello”? – Grim 2011-04-17 11:33:12

+0

@Kostya:你说得对。答案已更新。 – 2011-04-17 11:35:23

相关问题