qt中文乱码解决

qt中文乱码解决

ID:32366972

大小:56.50 KB

页数:6页

时间:2019-02-03

qt中文乱码解决_第1页
qt中文乱码解决_第2页
qt中文乱码解决_第3页
qt中文乱码解决_第4页
qt中文乱码解决_第5页
资源描述:

《qt中文乱码解决》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、QString与中文问题2010-07-1117:04(更新:本文的姊妹篇Qt中translate、tr关系与中文问题)首先呢,声明一下,QString是不存在中文支持问题的,很多人遇到问题,并不是本身QString的问题,而是没有将自己希望的字符串正确赋给QString。很简单的问题,"我是中文"这样写的时候,它是传统的char类型的窄字符串,我们需要的只不过是通过某种方式告诉QString这四个汉字采用的那种编码。而问题一般都出在很多用户对自己当前的编码没太多概念,于是一个简单的Qt程序下面这个小程序,估计大家会感到比较亲切。似乎有相当多的中文用户尝试写过这样的代码:

2、#include#includeintmain(intargc,char**argv){QApplicationapp(argc,argv);QStringa="我是汉字";QLabellabel(a);label.show();returnapp.exec();}编码,保存,编译,运行,一切都很顺利,可是结果呢:·多数用户看到其他用户看到ÎÒÊǺº×Ö我是汉å—出乎意料,界面上中文没显示出来,出现了不认识字符。 于是开始用搜索引擎搜索,开始上论坛发帖或抱怨最后被告知,下面的语句之一可以解决

3、问题:QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));两条指令挨个一试,确实可以解决(多数用户是第一条,其他用户是第二条)。那么,为什么会这样呢?两种乱码什么时候出现对这个问题,我想大家可能都有话说。在继续之前,我们先列个表,看看两种乱码分别在那种情况下出现:我们只列举大家最常用的3个编译器(微软VS的中的cl,Mingw中的g++,Linux下的g++

4、),源代码分别采用GBK和不带BOM的UTF-8 以及带BOM的UTF-8这3中编码进行保存。·源代码的编码编译器结果GBKcl1*mingw-g++1*g++1UTF-8(不带BOM)cl2mingw-g++2g++2*UTF-8(带BOM)cl1mingw-g++2g++编译失败采用3种不同编码保存的源代码文件,分别用3种不同的编译器编译,形成9种组合,除掉一种不能工作的情况,两种乱码出现的情况各占一半。从中我们也可以看出,乱码和操作系统原本是没有关系的。但我们在Windows一般用的GBK,linux一般用的是不带BOM的UTF-8。如果我们只考虑带*的情况,也可以

5、说两种乱码和系统有关。QString为什么会乱码呢真的是QString乱码了吗?我们可以问问自己,我们抱怨的对象是不是搞错了?继续之前,先明确几个概念:明确概念0:·"我是汉字"是C语言中的字符串,它是char型的窄字符串。上面的例子可写为constchar*str="我是汉字";QStringa=str;或charstr[]="我是汉字";QStringa=str;等明确概念1:·源文件是有编码的,但是这种纯文本文件却不会记录自己采用的编码这个是问题的根源,不妨做个试验,将前面的源代码保存成GBK编码,用16进制编辑器能看到引号内是ce d2 ca c7 ba ba d

6、7 d6这样8个字节。现在将该文件拷贝到正体(繁体)中文的Windows中,用记事本打开会什么样子呢?...QStringa="扂岆犖趼";QLabellabel(a);label.show();...那么放到欧美人的Windows系统中,再用记事本打开呢?...QStringa="ÎÒÊǺº×Ö";QLabellabel(a);label.show();...同一个文件,未做任何修改,但其中的8个字节ce d2 ca c7 ba ba d7 d6,对用GBK的大陆人,用BIG5的港澳台同胞,以及用Latin-1的欧洲人看来,看到的却是完全不同的文字。明确概念2:·如同

7、我们都了解的'A'与'x41'等价一样。GBK编码下的constchar*str="我是汉字"等价于constchar*str="xcexd2xcaxc7xbaxbaxd7xd6";当用UTF-8编码时,等价于constchar*str="xe6x88x91xe6x98xafxe6xb1x89xe5xadx97";注意:这个说法不全对,比如保存成带BOM的UTF-8,用cl编译器时,汉字本身是UTF-8编码,但程序内保存时却是对应的GBK编码。明确概念3:·QString内部采用的是U

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。