一种解决win上powershell或cmd运行c或cpp程序时因使用utf-8编码的源码而导致中文乱码的方法
问题描述:
在使用编辑器如vscode时,默认创建的文件是utf-8编码的。
如果程序中需要输出中文,由于powershell或cmd默认的中文编码是GBK,会导致输出的文字显示是乱码。
如果使用gcc,则可以添加参数解决:
-finput-charset=UTF-8
-fexec-charset=GBK
但是clang不支持上述参数
- 如果每次写c/cpp代码,都要手动更改编码,非常麻烦。
- 如果更改powershell或cmd的编码。如果既有的某些程序是GBK编码的,输出则会产生问题。
因此,我采用的解决方法是:
用一个程序包装编译器,在编译前,将源码先转换为GBK编码,再编译。
对于其参数:
这个程序第0个参数为使用的编译器,可填入gcc clang等
参数中的.cpp或.c则会被程序转换编码,产生转换后的临时文件.cpp.tem.cpp或.c.tem.c,再交由真正的编译器编译。
其余参数则会原样传递给真正的编译器。
临时文件会被自动清理。
注意事项
由于使用了windows.h,因此本程序仅支持windows平台。
但linux或MacOS上的终端一般采用utf-8编码,通常不会有这样的问题。
由于本人水平低下,这个程序是LLM生成的。我只负责了简单的调试。
仓库地址
仓库地址如下
使用示例
原来的编译指令如:
g++ -O2 main.cpp utils.cpp -o program.exe
在前面加上本程序的路径即可
wrapper_compiler.exe g++ -O2 main.cpp utils.cpp -o program.exe

浙公网安备 33010602011771号