Linux 系统下C++输出中文乱码

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

 

总结

  个人倾向于第二种方法,不然文件多了需要一个个修改编码格式,欢迎有更好解决方法的网友从评论区交流!

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值