gpt4 book ai didi

c++ - MSVC++ 中的源字符集编码规范,如 gcc "-finput-charset=CharSet"

转载 作者:IT老高 更新时间:2023-10-28 22:26:41 26 4
gpt4 key购买 nike

我想创建一些处理编码的示例程序,特别是我想使用宽字符串,例如:

wstring a=L"grüßen";
wstring b=L"שלום עולם!";
wstring c=L"中文";

因为这些是示例程序。

这对于将源代码视为 UTF-8 编码文本的 gcc 来说绝对是微不足道的。但是,直接编译在 MSVC 下不起作用。我知道我可以使用转义序列对它们进行编码,但我更愿意将它们保留为可读文本。

是否有任何选项可以指定为“cl”的命令行开关,以便做这个工作?有没有像gcc'c -finput-charset这样的命令行开关?

如果不是,您建议如何使文本对用户自然?

注意:将 BOM 添加到 UTF-8 文件不是一种选择,因为它变得无法被其他编译器编译。

注意2:我需要它在 MSVC 版本 >= 9 == VS 2008 中工作

真正的答案:没有办法

最佳答案

对于那些信奉“迟到总比不做”座右铭的人,Visual Studio 2015(编译器的第 19 版)现在支持这一点。

新的 /source-charset 命令行开关允许您指定用于解释源文件的字符集编码。它采用单个参数,可以是 IANA或 ISO 字符集名称:

/source-charset:utf-8

或特定代码页的十进制标识符(以点开头):

/source-charset:.65001

官方文档是here ,还有a detailed article describing these new options在 Visual C++ 团队博客上。

还有一个补充/execution-charset switch它以完全相同的方式工作,但控制在可执行文件中生成窄字符和字符串文字的程度。最后还有一个快捷开关,/utf-8 ,设置 /source-charset:utf-8/execution-charset:utf-8

这些命令行选项与旧的 #pragma setlocale#pragma execution-character-set 指令不兼容,它们适用全局到所有源文件。

对于坚持使用旧版本编译器的用户,最好的选择仍然是将源文件保存为带有 BOM 的 UTF-8(正如其他答案所建议的那样,IDE 可以在保存时执行此操作)。编译器将自动检测到这一点并采取适当的行动。 GCC 也是如此,它还在源文件的开头接受 BOM 而不会窒息而死,从而使这种方法在功能上具有可移植性。

关于c++ - MSVC++ 中的源字符集编码规范,如 gcc "-finput-charset=CharSet",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com