免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2821 | 回复: 1
打印 上一主题 下一主题

谈谈Qt的中文编码~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-04 11:23 |只看该作者 |倒序浏览

原文链接:
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[]){
8     QTextCodec *tc=QTextCodec::codecForName(”utf8″);
9     QTextCodec::setCodecForCStrings(tc);
10     QString str(”宁愿看见两个恶魔在拔河,也不愿看见一只天使在跳舞。”);
11
12     QTextCodec *tl=QTextCodec::codecForName(”utf8″);
13     QTextCodec::setCodecForLocale(tl);
14     qDebug()

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100156/showart_1985410.html

论坛徽章:
0
2 [报告]
发表于 2009-09-05 14:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP