谈谈Qt的中文编码 又是转的

谈谈Qt的中文编码~

 
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容,并不得用于商业用途。 谢谢合作。
原文链接: http://www.cuteqt.com/blog/?p=531



我的中文为什么没法显示?在Qt使用中经常有朋友会碰到这样的问题。
通过google搜索,会发现已经有人解决过了,无非就是重新设置一下默认的编码器

先调用下面两个函数之一
QTextCodec *textc=QTextCodec::codecForName(”gbk”);
QTextCodec *textc=QTextCodec::codecForName(”utf8″);

然后调用下面3个函数之一
QTextCodec::setCodecForCStrings(textc);
QTextCodec::setCodecForTr(textc);
QTextCodec::setCodecForLocale(textc);

至于调用哪一个是不知道的,只好挨着试,反正组合也不多。问题是解决了。但下次还是这么试。

下面我们来看看这几个函数都作用在什么地方。

1. setCodecForCStrings(textc)
这个函数主要用在用字符常量或者QByteArray构造QString对象时使用的默认编码方式。比如下面一个例子
23 int main(int argc,char *argv[]){
24        QApplication app(argc,argv);
25
26        QTextCodec *tc=QTextCodec::codecForName(”utf8″);
27        QTextCodec::setCodecForCStrings(tc);
28        QString str(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”);
29        QPushButton ww(str);
30        ww.show();
31
32        app.exec();
33 }
如果把26,27行的地方注释掉,那么我们在 QPushButton上看到的将是一堆乱码。因为在默认情况下QString把构造函数的字符串参数当成标准拉丁字符,很显然是会出现乱码的。如果是在 Linux下的话你在编辑器里输入的时候,默认文本格式是”utf8″,如果你是在windows下做开发那么26行的地方很可能要改成”gbk”了。

2.    setCodecForTr(textc)
这个函数的作用是设置传给tr函数时的默认字串编码
23 int main(int argc,char *argv[]){
24        QApplication app(argc,argv);
25
26        QTextCodec *tc=QTextCodec::codecForName(”utf8″);
27        QTextCodec::setCodecForCStrings(tc);
28        QString str(QObject::tr(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”));
29        QPushButton ww(str);
30        ww.show();
31
32        app.exec();
33 }
同样一个例子,我在28行的地方加了tr之后,运行的结果又不能正常显示中文了。需要将27行的函数改成setCodecForTr就可以了。

3. QTextCodec::setCodecForLocale(textc)
这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。比如通过流读取一个文件时内容时的编码格式。或者通过qDebug()输出打印信息时的编码。
7 int main(int argc,char *argv[]){
      QTextCodec *tc=QTextCodec::codecForName(”utf8″);
      QTextCodec::setCodecForCStrings(tc);
10        QString str(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”);
11
12        QTextCodec *tl=QTextCodec::codecForName(”utf8″);
13        QTextCodec::setCodecForLocale(tl);
14        qDebug()<<str;
15 }
你也可以试试把第12行去掉或者编码改成”gbk”,就会大概明白setCodecForLocale的作用了。

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容,并不得用于商业用途。 谢谢合作。
原文链接: http://www.cuteqt.com/blog/?p=531
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值