1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PyQt输出中文出现乱码解决方法

PyQt输出中文出现乱码解决方法

时间:2021-11-24 06:02:52

相关推荐

PyQt输出中文出现乱码解决方法

中文乱码问题困扰了我很久,这次尝试使用PyQt最费我时间的便是汉字的转码问题,所以想写一些关于这方面问题的总结,至少以后在遇到这类问题能少走一些弯路,也希望能够帮助和我一样的萌新们,如有纰漏,欢迎大佬指点!!!

首先,decode和encode的作用:

decode是将其他编码的字符串转换成unicode编码,如str.decode('utf-8'),表示将gb2312编码的字符串str1转换成utf-8编码。

encode是将unicode编码转换成其他编码的字符串,如str.encode('utf-8'),表示将unicode编码的字符串str2转换成utf-8编码。

如果网页是以‘utf-8’编码的,如

则抓取的网页的数据也都是utf-8编码,如果要写入到以gbk编码的文件,这时候要进行转换,一般是先要把’utf-8’decode成unicode码,然后再encode(‘gbk’)。unicode就像是不同编码转换的中间人

而我使用PyQt时遇到的主要问题是,从lineEdit和textEdit上获取的文本,我以为是str类型的,然而运行报错

Qstring 没有strip这个属性,what?QString和str不一样么......然后寻思能不能把QString转换成unicode然后转到str,发现

然后百度了一下方法,首先试了一下str(),发现并不可行,转换非中文还可以,而中文的话则会出现:

'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

这个错误比较常见,比如说以utf-8编码的str,str.encode('gbk')就会报类似的错误,有大佬详细分析,其等价为str.decode(encoding).encode('gbk'),而中间这步str.decode(encoding)会默认转换为ascii码。同理,str()也是如此,汉字经中间转换而来的ascii无法encode为汉字,即无法转换为你默认的编码

然后看到有人使用的是unicode函数,和我最开始思路一样,转换为unicode然后encode为我的默认编码,只不过我一开始的方法错了,改正后的代码为:

BattleTag_str=unicode(QtCore.QString(BattleTag)).encode('utf-8')

这里由于我最终的URL为

self.URL="http://hero./list/"+BattleTag_str

我默认的为‘utf-8’,所以把BattleTag_str也转换为utf-8编码

最后贴上两篇对我帮助非常大的博客,感谢这两位博主(虽然都是转载的,但找不到原创了)~~~

/uid-200142-id-4018863.html

/article/78679.htm

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。