如何用std::cout打印键盘不存在的特殊字符?打印│┼─乱码求助
解决cout打印框线字符乱码的问题
嘿,这个问题我太熟了!本质就是编码不匹配在搞鬼——Notepad和Dev-C对文件编码的默认处理逻辑不一样,导致你粘贴的框线字符保存后再打开就变了味,最终编译输出自然成了“Γöé”这类乱码。下面给你几个靠谱的解决思路:
1. 统一编辑器的文件编码
这是最直接的根治办法:
- 如果用Notepad写代码,写完后选「编码」→「转为ANSI编码」(Windows下ANSI等价于GBK)再保存;Dev-C默认会用ANSI编码读取文件,这样字符就不会变样了。
- 反过来也可以:打开Dev-C++,依次点「工具」→「编辑器选项」→「语法」,把「默认编码」改成「UTF-8」,重启软件后,Notepad++也用UTF-8保存代码,两边编码统一就不会乱码。
2. 用代码强制指定输出编码
不想折腾编辑器设置的话,直接在代码里给stdout指定编码:
比如要输出UTF-8格式的框线字符,在main函数开头加这段代码(Windows环境下):
#include <iostream> #include <fcntl.h> #include <io.h> int main() { // 把标准输出设置为UTF-8编码 _setmode(_fileno(stdout), _O_U8TEXT); std::wcout << L"│ ┼ ─" << std::endl; return 0; }
这里用wcout配合宽字符字面量L"",再强制输出UTF-8,就能正确显示这些特殊字符了。
3. 用转义序列代替直接粘贴字符
怕编码来回折腾的话,干脆不用手动粘贴字符,直接用它们的Unicode转义序列:
- │ 的Unicode是U+2502,转义写法是
"\u2502" - ┼ 是U+253C,写法是
"\u253C" - ─ 是U+2500,写法是
"\u2500"
代码里直接这么写:
#include <iostream> #include <fcntl.h> #include <io.h> int main() { _setmode(_fileno(stdout), _O_U8TEXT); std::cout << "\u2502 \u253C \u2500" << std::endl; return 0; }
这样不管编辑器编码怎么设,只要输出编码配置对了,就能正常显示框线字符。
4. 调整Dev-C++的编译选项
有时候Dev-C++的默认编译字符集偏旧,你可以在「项目」→「项目属性」→「编译器」里,添加编译选项:-finput-charset=UTF-8 -fexec-charset=UTF-8(如果用UTF-8编码的话),确保编译器能正确识别文件里的特殊字符。
内容的提问来源于stack exchange,提问作者DaaWaan
相关产品推荐
相关产品推荐

