当前位置: 首页 > news >正文

Visual Studio C/C++编译器cl.exe的/source-charset与/execution-charset设置项

Visual Studio C/C++编译器cl.exe的/source-charset与/execution-charset设置项

/source-charset选项

指定源代码的字符编码方法。未设置该项时,按照系统默认的字符编码解析源代码文件,例如在Windows平台是GBK编码。

随着跨平台开发的流行,越来越多的代码编辑器默认以utf-8编码保存源代码文件,因而需要将/source-charset设置为utf-8以顺利编码其中的中文字符。

简而言之,开发者的C/C++工程所有源码文件应该使用统一的字符编码方法。然后将/source-charset设置为对应的方法名,保证编译正确。

特殊情况:在Windows平台中,源码文件都使用GBK或GB2312编码时,可以不必手动设置/source-charset项,亦可以正常在命令行输入、输出中文字符。

/execution-charset选项

顾名思义,执行字符集选项用于指定在编译完成的可执行程序(.exe)中字符串的编码方式。
在Windows平台默认依然是GBK编码。

GBK编码的中文字符串输出到默认代码页的CMD窗口,毫无问题;
然而某些时候需要将中文字符串输出到utf-8代码页的CMD窗口,这时不配置该选项就会乱码。

简而言之,编译程序时设定的/execution-charset值应当与运行可执行程序的终端的字符编码一致,以确保正常输出中文内容。

/source-charset和/execution-charset的设定格式

在选项后以冒号设置编码名或** .代码页编号 **:

例如:

/execution-charset:utf-8

等价于

/execution-charset:.65001

/execution-charset:gbk等价于/execution-charset:.936,不再赘述。

冒号后跟的名称或编号可到微软文档查询。

/source-charset和/execution-charset的设置方法

打开项目的“属性”对话框。
选择“配置属性”>“C/C++”>“命令行”属性页,在“其他选项”中,添加/source-charset/execution-charset 等选项以指定首选编码,例如/execution-charset:utf-8,最后点击“确定”以应用更改 。

在这里插入图片描述

在这两个选项需要同时设置为utf-8的场景下,可以直接在其他选项设置/utf-8以代替/source-charset:utf-8和/execution-charset:utf-8

测试例程

#include <stdio.h>
#include <wchar.h>
#include <iostream>
#include <windows.h>
int main()
{printf("中文测试1 数字: %.2f\n", 1234.56);  // 输出 "1234.56"// 获取当前代码页int idx = GetConsoleOutputCP();  // 获取当前代码页printf("当前代码页: %d\n", idx);  // 输出当前代码页return 0;
}

在Windows平台下将这段代码以GB2312编码保存到文件,在VS中以默认选项编译得到可执行程序。在命令行运行该程序,可正常的输出中文结果:

中文测试1 数字: 1234.56
当前代码页:936

接下来,将命令行代码页切换到utf-8(运行命令chcp 65001),再次运行程序,则输出乱码。因为控制台接收字节流之后,按utf-8解码成字符;而默认选项编译的程序中,字符串字节流是GB2312编码的,编码解码方式不匹配,自然会乱码。

最后,编译时设置/execution-charset:utf-8,则可观察到,编译得到的可执行程序在默认代码页的命令行输出乱码,在代码页65001的命令行中正确输出中文结果。

参考阅读

设置执行字符集

相关文章:

  • 扩展中国剩余定理
  • day 32 学习笔记
  • 【前端】【业务场景】【面试】在前端开发中,如何优化 SVG(可缩放矢量图形)的性能,特别是在处理复杂图形和动画时
  • ZooKeeper配置优化秘籍:核心参数说明与性能优化
  • 多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)
  • 最高支持高速L3商用,华为发布ADS 4智驾系统
  • AT45DB161串行FLASH操作
  • 晶振不集成到芯片内部的原因分析
  • Ubuntu中选择Python虚拟环境
  • 考拉悠然:科技与匠心,以烟草虫情AI监测系统共筑品质未来
  • git tag使用场景和实践
  • BDO分厂开展地沟“大清肠”工作
  • 交通运输行业综合智慧监管平台:商贸物流的安全与效率引擎
  • G3学习笔记
  • ejs列表渲染,条件渲染,在node中使用ejs
  • 【C++入门:类和对象】[3]
  • JS 应用算法逆向三重断点调试调用堆栈BP 插件发包安全结合
  • java中final以及static的作用
  • Linux并发与竞争:从生活例子到内核实战
  • 从对数变换到深度框架:逻辑回归与交叉熵的数学原理及PyTorch实战
  • 岭南非遗大IP来上海了,舞剧《英歌》在文化广场连演两场
  • 国防部就美军“压力测试”大演习答澎湃:中国从来不信邪,不怕打,不怕压
  • 上海市闵行区原二级巡视员琚汉铮接受纪律审查和监察调查
  • 最高法:家长以监督为名虚构事实诋毁学校的,应承担侵权责任
  • A股三大股指涨跌互现:人形机器人产业链爆发,两市成交超1.2万亿元
  • 明日出征!航天员详细信息来啦