知行编程网知行编程网  2022-08-12 23:30 知行编程网 隐藏边栏  467 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python如何解决中文乱码问题的相关知识,包括python读取中文乱码,以及python str方法中文乱码这些编程知识,希望对大家有参考作用。

python如何解决中文乱码问题


1、demo.py 文件和编码声明都为 GBK

这种方法比较愚蠢。就是把demo.py文件改成GBK存储,编码声明也是GBK,不推荐。

python学习网,大量的免费
,欢迎在线学习!

# encoding:gbk
s = "中文"
print s
print repr(s)


python如何解决中文乱码问题


2、中文用 unicode 表示

只要在中文前面加上一个小u标记,后面的中文就会以unicode存储。

# encoding:utf-8
s = u"中文"
print s
print repr(s)

cmd 下是可以打印 unicode 字符的,如下:

python如何解决中文乱码问题


3、把中文强制转换为GBK或者unicode编码

强制转换为unicode编码,Python中编码可以相互转换,比如从utf-8转换为gbk,但是不同编码之间不能直接转换,需要通过unicode字符集进行转换。从上面的基础知识可以看出,unicode是一种不属于encoding的字符集,而utf-8是专门实现unicode思想的一种编码。 utf-8到unicode的转换是一个解码的过程,可以通过decode从utf-8解码到unicode。

# encoding:utf-8
s = "中文"
u = s.decode('utf-8')
print u
print type(u)
print repr(u)

python如何解决中文乱码问题

强制转换为gbk编码,上一步已经从utf-8转换为unicode,从unicode就是encoding的过程,通过encode实现。

# encoding:utf-8
s = "中文"
u = s.decode('utf-8')
g = u.encode('gbk')
print g
print type(g)
print repr(g)


python如何解决中文乱码问题


总结

windows cmd窗口不支持utf-8,如果要显示中文,必须转成gbk或者unicode,Python idle中三种编码都支持。中文乱码的出现是由于编码不一致造成的。存储为 utf-8。打印时,使用gbk会导致乱码。所有人都应该保证没有乱码尽量保持统一,建议所有人都使用unicode。


decode 解码

从其他编码转换为 unicode 称为解码。解码方法是decode。第一个参数是解码后字符串的原始编码格式。如果写错了,会报错。比如s是utf-8,用gbk解码会报错。

# encoding:utf-8
s = "中文"
u = s.decode('gbk')
print u
print repr(u)


python如何解决中文乱码问题


小提示

Python idle 和 cmd 下直接输入 s = "Chinese" 会被编码成 gbk。如果在文件中输入s="Chinese",文件存储格式是utf-8,那么s是用utf-8编码存储的,有点和我踩坑不一样了,而且即使Python idle 成功运行文件,它可能会失败。


encode 编码

无法直接从 utf-8 转换为 gbk。它必须转换为 unicode。这个非常重要。编码后的原始字符串必须是unicode,否则会报错。


raw_input

raw_input是获取用户输入值,获取的用户输入值与当前运行环境编码有关。比如cmd下的默认编码是gbk,那么输入的汉字都是用gbk编码的,不管demo.py文件的编码格式和编码声明。

# encoding:utf-8
s = raw_input("input something: ")
print s
print type(s)
print repr(s)

python如何解决中文乱码问题

GBK 编码一个汉字两个字节,UTF-8 一个汉字通常3个字节。

细心的朋友注意到raw_input的提示语言是英文,所以改成中文看看,真的是乱码。

# encoding:utf-8
s = raw_input("请输入中文汉字:")
print s
print type(s)
print repr(s)

python如何解决中文乱码问题

怎么做?强制提示字符串为gbk编码很好,但是unicode和utf-8都不能用。

# encoding:utf-8
s = raw_input(u"请输入中文汉字:".encode('gbk'))
print s
print type(s)
print repr(s)


python如何解决中文乱码问题


相等陷阱

两个字符串“Chinese”存储的编码不同,utf-8编码和gbk编码存储的“Chinese”也不一样。

python如何解决中文乱码问题


总结

想要不乱码,记住以下5点法则:

(1)文件存储为utf-8格式,编码声明为utf-8,# encoding:utf-8。

(2)出现汉字的地方前面加 u。

(3)不同编码之间不能直接转换,要经过unicode中间跳转。

(4)cmd 下不支持utf-8编码。

(5)raw_input提示字符串只能为gbk编码。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享