Linux 系统下C++输出中文乱码
Linux 系统下修改文件编码格式
问题描述:
在使用C++查询云服务器数据库得到UTF-8格式的含有中文的字符串后,将其输出时中文部分出现乱码。
经测试发现,通过查询云端数据库得到的字符串输出时,每个乱码的汉字占三个字符位,而C++语句定义的字符串输出时,每个乱码的汉字占两个字符位。所以得出结论,我的Linux系统下cpp文件默认使用的是 GBK 编码格式,与查询到的数据编码格式 UTF-8 不同,才导致输出汉字乱码。
解决方法:
这种情况解决方法有两种,一种是修改文件编码格式,一种是使用 g++ 编译器指令指定编码格式。
方法(1):修改文件编码格式,在终端输入以下命令,其中 Src.cpp 为需要修改编码格式的源文件(已经写好的文件),Obj.cpp 为修改后的目标文件(不存在,文件名自定义),修改成功后,重新编译输出即可。注意!!!使用这个方法的时候一定要备份源文件!!!不要把源文件名和目标文件名写成一样的,否则会导致文件内容丢失!!!
iconv -f GBK -t UTF-8 Src.cpp -o Obj.cpp
方法(2):使用 g++ 编译器指令指定编码格式,在makefile文件下 g++ 后添加 -finput-charset=GBK -fexec-charset=UTF-8 ,添加成功后,重新编译输出即可。其中 -finput-charset 用来设置读取文件的编码方式, -fexec-charset用来设置生成的可执行文件的编码方式。
g++ -finput-charset=GBK -fexec-charset=UTF-8 -std=c++11 -g -o run Main.cpp MyDB.cpp
总结
个人倾向于第二种方法,不然文件多了需要一个个修改编码格式,欢迎有更好解决方法的网友从评论区交流!