- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想创建一些处理编码的示例程序,特别是我想使用宽字符串,例如:
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/
我想创建一些处理编码的示例程序,特别是我想使用宽字符串,例如: wstring a=L"grüßen"; wstring b=L"שלום עולם!"; wstring c=L"中文"; 因为这些是
我想创建一些处理编码的示例程序,特别是我想使用宽字符串,例如: wstring a=L"grüßen"; wstring b=L"שלום עולם!"; wstring c=L"中文"; 因为这些是
我正在尝试使用 -finput-charset 编译器选项在 g++ 中编译 UTF-16BE C++ 源文件,但我总是遇到一堆错误。更多详情如下。 我的环境(CentOS Linux): g++:
我是一名优秀的程序员,十分优秀!