【问题标题】:Is it possible to use UTF-8 encoding by default in Visual Studio 2008? [duplicate]是否可以在 Visual Studio 2008 中默认使用 UTF-8 编码? [复制]
【发布时间】: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


    【解决方案1】:

    这篇博文看起来很有前景:UTF-8 strings and Visual C++

    大部分重要内容仍然存在,尽管有些图片已损坏。简而言之:

    1. 第一步,您必须确保源文件使用字节顺序标记 (BOM) 进行 UTF-8 编码。 BOM 是极其重要的东西,没有它,C++ 编译器将无法正常运行。

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

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

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

      在我们的例子中,无论系统使用什么语言环境都可以,这是通过传递“”作为第二个参数来完成的。

    3. 为了严谨,一定要检查setlocale的返回值,如果返回0,说明出错。在多语言应用程序中,您需要更精确地使用 setlocale,明确提供您想要使用的语言环境(例如,您可能希望您的应用程序在日语计算机上显示俄语文本)。

    我不知道有什么好方法可以将其设为默认值。我很确定这是不可能的。如果您要为 Unicode 编译,Windows 应用程序强烈更喜欢 UTF-16。如果可能,您应该转换为该格式。

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

    【讨论】:

    • 我对此没有任何问题,但是,据我所知,Visual Studio 中的 UNICODE == UTF16。是否可以对 L"hello" 等字符串强制使用 UTF-8 编码?
    • @Kostya:你是对的。答案已更新。
    猜你喜欢
    • 2014-04-23
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2013-04-28
    • 2016-08-06
    相关资源
    最近更新 更多