1、demo.py 文件和编码声明都为 GBK
这种方法比较愚蠢。就是把demo.py文件改成GBK存储,编码声明也是GBK,不推荐。
python学习网,大量的免费
,欢迎在线学习!
# encoding:gbk
s = "中文"
print s
print repr(s)
2、中文用 unicode 表示
只要在中文前面加上一个小u标记,后面的中文就会以unicode存储。
# encoding:utf-8
s = u"中文"
print s
print repr(s)
cmd 下是可以打印 unicode 字符的,如下:
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)
强制转换为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)
总结
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 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)
GBK 编码一个汉字两个字节,UTF-8 一个汉字通常3个字节。
细心的朋友注意到raw_input的提示语言是英文,所以改成中文看看,真的是乱码。
# encoding:utf-8
s = raw_input("请输入中文汉字:")
print s
print type(s)
print repr(s)
怎么做?强制提示字符串为gbk编码很好,但是unicode和utf-8都不能用。
# encoding:utf-8
s = raw_input(u"请输入中文汉字:".encode('gbk'))
print s
print type(s)
print repr(s)
相等陷阱
两个字符串“Chinese”存储的编码不同,utf-8编码和gbk编码存储的“Chinese”也不一样。
总结
想要不乱码,记住以下5点法则:
(1)文件存储为utf-8格式,编码声明为utf-8,# encoding:utf-8。
(2)出现汉字的地方前面加 u。
(3)不同编码之间不能直接转换,要经过unicode中间跳转。
(4)cmd 下不支持utf-8编码。
(5)raw_input提示字符串只能为gbk编码。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在python中删除“\ n”08/19
- ♥ 如何检查python中安装了哪些模块10/14
- ♥ python如何切换目录09/18
- ♥ Python3编码如何实现相互转换?11/28
- ♥ python中的Git分支操作10/06
- ♥ python中的pow是什么意思08/13
内容反馈