gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:20:04 30 4
gpt4 key购买 nike

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

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

因为这些是示例程序。

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

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

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

注意:向 UTF-8 文件添加 BOM 不是一个选项,因为其他编译器将无法编译该文件。

注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#pragmaexecution-character-set 指令不兼容,并且它们适用全局到所有源文件。

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

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

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