Python 2.7打印含波兰语字母列表乱码问题求助
解决Python 2.7中波兰语字符列表打印乱码的问题
嘿,这个问题我太熟悉了——Python 2的编码机制和Python 3差异很大,尤其是处理非ASCII字符时很容易踩坑!你看到的['\xc4\x84', '\xc5\xbb', '\xc3\x93', '\xc4\x86', '\xc5\xb9']其实是这些波兰语字符的UTF-8字节表示,不是真的乱码,只是Python 2默认把字节串(str类型)直接打印成了转义形式。
先说说你两种写法的问题:
- 写法一:
split()后得到的是列表,而decode()是字符串(str)的专属方法,列表没有这个属性,所以这段代码会直接报错,根本跑不起来。 - 写法二:你用列表推导式生成了编码后的元素,但没有把结果赋值给
mail,原mail还是拆分后的字节串列表;而且方向搞反了——你需要把字节串(str)解码成unicode类型,而不是做编码操作。
正确的处理步骤:
首先必须在Python文件开头声明编码,告诉解释器用UTF-8读取源码(不然直接写波兰语字符会触发编码错误):
# -*- coding: utf-8 -*-
然后分两种可靠方式处理:
方式1:先转成unicode再拆分
# -*- coding: utf-8 -*- # 原始字符串是UTF-8编码的字节串(str类型) mail_str = " Ą Ż Ó Ć Ź" # 先把字节串解码成unicode类型(Python 2中专门存文本的类型) mail_unicode = mail_str.decode('utf-8') # 拆分得到unicode元素组成的列表 mail_list = mail_unicode.split() # 打印时,Python 2会自动将unicode转成控制台支持的编码(只要控制台兼容就能正常显示) print mail_list
方式2:拆分后逐个解码
# -*- coding: utf-8 -*- mail_str = " Ą Ż Ó Ć Ź" # 拆分得到字节串列表 mail_list = mail_str.split() # 遍历列表,把每个字节串解码成unicode unicode_mail_list = [item.decode('utf-8') for item in mail_list] print unicode_mail_list
额外注意:Windows控制台编码适配
如果你的Windows控制台默认编码不支持UTF-8(比如用的是GBK或CP1252),即使转成unicode可能还是显示乱码。这时候可以把unicode转成Windows支持的中欧编码(CP1250,专门适配波兰语等东欧语言):
# -*- coding: utf-8 -*- mail_str = " Ą Ż Ó Ć Ź" mail_list = mail_str.split() unicode_list = [item.decode('utf-8') for item in mail_list] # 转成CP1250编码的字节串再打印 print [item.encode('cp1250') for item in unicode_list]
这样就能正确显示['Ą', 'Ż', 'Ó', 'Ć', 'Ź']啦!
内容的提问来源于stack exchange,提问作者Mr_Happy
相关产品推荐
相关产品推荐

