• 6418阅读
  • 10回复

[提问]windows下QT编码问题?? [复制链接]

上一主题 下一主题
离线starter
 
只看楼主 倒序阅读 楼主  发表于: 2012-08-24
为何在编译.ui文件生成的ui_xxx.h文件中指定编码都为UnicodeUTF8
label->setText(QApplication::translate("MainDlg", "\347\224\265\346\261\240\347\273\204\347\224\265\345\216\213", 0, QApplication::UnicodeUTF8));

而在源程序中要将字符串指定编码为gbk,如果改为utf8显示乱码,请问这是为什么啊?
QTextCodec* code= QTextCodec::codecForName("gbk");
QTextCodec::setCodecForCStrings(code);

两处编码为何会不一致??
离线dbzhang800

只看该作者 1楼 发表于: 2012-08-24
离线starter
只看该作者 2楼 发表于: 2012-08-24
看了反而更糊涂了,,我说的是在windows上面用vs2008开发,怎么又扯到gcc了
离线dbzhang800

只看该作者 3楼 发表于: 2012-08-24
引用第2楼starter于2012-08-24 16:42发表的  :
看了反而更糊涂了,,我说的是在windows上面用vs2008开发,怎么又扯到gcc了

因为你在简体中文windows下,使用的又是VS2008,所以C++的执行字符集是GBK!!

换句话说,你写好的程序,不做任何修改,拿到正体中文的windows下,即使你仍然用VS2008,你也无法正常显示文字!!

更不用提你想跨其他平台了
离线starter
只看该作者 4楼 发表于: 2012-08-24
那为什么默认生成的ui_xxx.h文件中设置的编码是UnicodeUTF8?
label->setText(QApplication::translate("MainDlg", "\347\224\265\346\261\240\347\273\204\347\224\265\345\216\213", 0, QApplication::UnicodeUTF8));

离线dbzhang800

只看该作者 5楼 发表于: 2012-08-24
因为,在MSVC2010sp1和GCC4.6普及之前,这估计是唯一可以保证源码跨平台的做法——代码中不出现非ASCII字符,如果需要,则使用转义字符。

说到底,就是微软的东西对UTF8的支持过于另类造成的。
离线starter
只看该作者 6楼 发表于: 2012-08-24
引用第5楼dbzhang800于2012-08-24 17:04发表的  :
因为,在MSVC2010sp1和GCC4.6普及之前,这估计是唯一可以保证源码跨平台的做法——代码中不出现非ASCII字符,如果需要,则使用转义字符。
说到底,就是微软的东西对UTF8的支持过于另类造成的。

既然执行码是GBK,为什么源码中有的地方设为gbk,有的地方设为utf8 ??
离线dbzhang800

只看该作者 7楼 发表于: 2012-08-24
你不认得那串东西是
你输入的
汉字的
utf8编码的
转义么?
离线starter
只看该作者 8楼 发表于: 2012-08-24
引用第7楼dbzhang800于2012-08-24 17:17发表的  :
你不认得那串东西是
你输入的
汉字的
utf8编码的
转义么?[表情]  

这位大哥,恕小弟愚钝,我有点晕头转向了,问题是为何那地方设置utf8编码,执行后能够正确显示中文,不是应该为gbk才对吗?
离线dbzhang800

只看该作者 9楼 发表于: 2012-08-24
引用第8楼starter于2012-08-24 17:24发表的  :
这位大哥,恕小弟愚钝,我有点晕头转向了,问题是为何那地方设置utf8编码,执行后能够正确显示中文,不是应该为gbk才对吗?



不妨去看这个吧,编码问题,主要就是理清楚概念。不然越弄越糊涂。

http://blog.csdn.net/xiaoyangger/article/details/5733302

====================
题外,回答你这个问题:
uic生成的已经是utf8编码转义字符!

只有你自己在代码中写的非ASCII字符,你才需要告诉人家,你用的是什么编码。
离线roywillow

只看该作者 10楼 发表于: 2012-08-24
\347\224\265\346\261\240\347\273\204\347\224\265\345\216\213
这段东西应该是你用的中文的转义吧,只要代码知道这段转义是按照什么编码转义的,那么不管到哪都能最后生成唯一的unicode字符串
因为,这段转义文本(不是转义前的文本)不管是用gbk还是utf8编码的,ascii字符的编码是对应的,到哪看都是“\347\224\265\346\261\240\347\273\204\347\224\265\345\216\213”,而不会变成“&*^&$*(*(_)_”之类的,而你要是直接写中文就不好说了
或者说,为了避免源码字符集不同而导致最后程序的字符集不同,那些在不同字符集中有歧义的非ascii字符就要转义成上面这种形式才可以避免
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个