Visual Studio 2008 中是否可以默认使用 UTF-8 编码?

发布于 2024-11-01 21:00:21 字数 339 浏览 1 评论 0原文

可能的重复:
如何创建 UTF-8 字符串Visual C++ 2008 中的文字

是否可以强制 Visual Studio 默认对所有字符串使用 UTF-8 编码?

例如

wchar_t *txt="hello";

以utf8编码

Possible Duplicate:
How to create a UTF-8 string literal in Visual C++ 2008

Is it possible to force Visual Studio to use UTF-8 encoding for all strings by default?

For example have

wchar_t *txt="hello";

encoded in utf8

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原野 2024-11-08 21:00:21

这篇博客文章看起来很有前途:UTF-8 字符串和 Visual C++

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

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

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

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

    您需要使用 setlocale 更改区域设置 函数让输入输出流处理器正确解释字符串。

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

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

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

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

This blog article looks promising: UTF-8 strings and Visual C++

Most of the important content is still there, even though some of the pictures are broken. In short:

  1. First step, you have to make sure the source file is UTF-8 encoded with the byte order mark (BOM). The BOM is an extremely important thing, without it the C++ compiler will not behave correctly.

    In Visual Studio 2008, this can be done directly from the IDE with the Advanced save command located in the File menu. A dialog box will pop up. Select UTF-8 with signature.

  2. If you compile and run a test program, [you are not going to get the expected result.] What happens is that, although your text is properly encoded in UTF-8, for compatibility reasons the C/C++ runtime is by default set to the “C” locale. This locale assumes that all char are 1 byte. Erm. Not quite the case with UTF-8 my dear!

    You need to change the locale with the setlocale function to have the string properly interpreted by the input output stream processors.

    In our case, the locale of whatever the system is using is fine, this is done in passing “” as the second parameter.

  3. To be rigorous, you must check the return value of setlocale, if it returns 0, an error occurred. In multi-language applications, you will need to use setlocale with more precision, explicitly supplying the locale you want to use (for example you may want to have your application display Russian text on a Japanese computer).

I don't know of any good way to make this the default. I'm pretty sure it's not possible. Windows applications strongly prefer UTF-16, if you're compiling for Unicode. If at all possible, you should convert to that format.

Otherwise, the best possible option I can come up with is to define a simple macro (something akin to _T("string") defined in the Windows headers) that converts to UTF-8 using the above logic.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文