QT中文乱码关键几点强调

QT,相信使用的人很多用在跨平台上,然而要保证Windows、Linux同用一份源码,就不得不考虑源代码编码问题了,在编码发展上,我打赌未来肯定是要舍弃Ansi转向Unicode编码的,Unicode又有多种编码方式GBK(GB2312的升级版),BIG5,utf8,utf16等。

Win下默认GBK,Linux(ubuntu)默认utf8,然而QT呢?QTCreator文本编辑器默认也是utf8文件格式,BOM目前存在则保留。所以通常设置

	QTextCodec *codec = QTextCodec::codecForName("utf8");
	QTextCodec::setCodecForTr(codec);
    	QTextCodec::setCodecForCStrings(codec);
    	QTextCodec::setCodecForLocale(codec);

 
就能解决大部分问题,通常很多人犯的错误,包括我接触过的别人写的项目都是各种文件格式Ansi、utf8、gbk糅合在一个项目中(估计都是直接从网上download的代码,自己没整理就直接使用文件)。导致这里没乱码,那里有乱码,这种现象。 

在某些情况下也是有问题的,因为程序可能读到系统的中文路径,或者调用中文路径下的外部程序,这时候如果系统是gb2312就有问题了。因为中文路径的编码是采用utf-8存到QString里的,系统读中文路径解码的时候采用的却是系统的gb2312,所以会调不起带中文路径的外部程序。

以上问题下面方法可以解决:

    QTextCodec *codec =QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

对于外部字符串编码解码全部采用本地编码。

还有一种乱码叫编码乱码,比如说,源代码utf8编码,
QTextCodec *codec =QTextCodec::codecForName("GBK");

就会导致乱码,反之亦然,故源代码与程序中使用必须统一,其实这一点是所有编译器都应该遵循的原则。因此,

Windows环境下,Qt Creator+VS编译器

1、如果该工程不需要跨平台使用(只在win),那么工程设置请使用GBK的编码方式.

2、如果该工程要跨平台使用(win+linux),那么工程设置请使用UTF-8+BOM的编码方式.

Linux环境下,Qt Creator+gcc,

默认是UTF-8(无BOM)编码方式,

综上:不考虑跨平台的话可以用默认设置,考虑到跨平台,建议选择UTF-8+BOM的编码方式.具体设置如下图



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值