一种解决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生成的。我只负责了简单的调试。

仓库地址

仓库地址如下

https://github.com/HuLunTunTao/utf8-to-gbk-compiler-wrapper

使用示例

原来的编译指令如:

g++ -O2 main.cpp utils.cpp -o program.exe

在前面加上本程序的路径即可

wrapper_compiler.exe g++ -O2 main.cpp utils.cpp -o program.exe
posted @ 2025-08-04 23:41  囫囵吞桃  阅读(122)  评论(0)    收藏  举报