在 Ubuntu 下用 C++ 出现“乱码”,通常不是 C++ 本身的问题,而是字符编码不一致导致的。下面按最常见原因给你梳理一下。
很多编辑器(Windows 传过来的文件)可能是:
而 Ubuntu 终端默认是 UTF‑8。
✅ 解决方法:
file your_file.cpp
如果不是 UTF‑8:
iconv -f GBK -t UTF-8 your_file.cpp -o new.cpp
检查终端编码:
locale
正常应看到:
LANG=zh_CN.UTF-8
LC_CTYPE=UTF-8
如果不是:
sudo apt install locales
sudo dpkg-reconfigure locales
选择 zh_CN.UTF-8 或 en_US.UTF-8
cout << "中文" << endl;
如果源码不是 UTF‑8,就会乱码。
✅ 正确做法:
std::string + UTF‑8std::wstring / wcout 吗?不推荐(在 Linux 下反而更容易乱码)
Linux 下推荐:
#include <iostream>
using namespace std;
int main() {
cout << "中文测试" << endl;
}
只要 终端 UTF‑8 + 源码 UTF‑8,就没问题。
例如:
✅ 建议:
std::ifstream / ofstreamVS Code:
"files.encoding": "utf8"
CLion:
Settings → Editor → File Encodings → UTF‑8
| 检查项 | 是否正确 |
|---|---|
| 源码 UTF‑8 | ✅ |
| 终端 UTF‑8 | ✅ |
| 不加 BOM | ✅ |
| 不用 GBK | ✅ |
| 不混用 wchar_t | ✅ |
#include <iostream>
using namespace std;
int main() {
setlocale(LC_ALL, "");
cout << "你好,Ubuntu!" << endl;
return 0;
}
编译:
g++ main.cpp -o main
./main
如果你愿意,可以把:
locale 输出发给我,我可以直接帮你定位是哪一步编码错了。