解决终端编译时乱码问题

解决终端编译时乱码问题

在 Windows 下,用 g++ 编译出的 exe 运行时中文乱码,99 % 是 “源码编码”“终端编码” 不一致造成的。
下面给出 3 种最常用、最简单的解决方案,你任选其一即可。


方案 1:编译时直接把字符串转成 GBK(推荐)

把源码保存成 UTF-8,在编译命令里加 2 个参数:

g++ 3-最佳品牌.cpp -o 3-最佳品牌.exe \
    -finput-charset=UTF-8 \
    -fexec-charset=GBK

解释

  • -finput-charset=UTF-8 告诉 g++ 源码是 UTF-8。
  • -fexec-charset=GBK 把程序里的字符串常量按 GBK 编码写入 exe。
    cmd / PowerShell 默认就是 GBK,所以显示正常,无需改终端

方案 2:不改源码编码,改终端为 UTF-8

  1. 源码保持 UTF-8编译命令不加任何额外参数(或只加 -finput-charset=UTF-8)。
  2. 运行前在终端敲:
chcp 65001

终端就被临时切到 UTF-8,随后运行 exe 即可正常显示中文。
(也可以把 chcp 65001 && 3-最佳品牌.exe 做成一条快捷命令)


方案 3:直接把源码改成 GBK

用 VS Code / Notepad++ → 另存为 → 编码选 GB2312/GBK,然后

g++ 3-最佳品牌.cpp -o 3-最佳品牌.exe

即可,默认就能匹配终端编码。
缺点:源码换平台(Linux/macOS)时可能出现反向乱码。


一键懒人法(VS Code tasks.json)

如果你用 VS Code 的 tasks.json 一键编译,把这两句插到 "args" 数组里即可:

"-finput-charset=UTF-8",
"-fexec-charset=GBK"

完整片段示例:

"args": [
    "-g",
    "${file}",
    "-o",
    "${fileDirname}/${fileBasenameNoExtension}.exe",
    "-finput-charset=UTF-8",
    "-fexec-charset=GBK"
]

保存后 Ctrl+Shift+B 重新编译,运行不再乱码。

posted @ 2025-07-29 21:21  小西贝の博客  阅读(57)  评论(0)    收藏  举报