Ⅰ python 无法显示汉字
实际上,这段代码所出现的问题和cPickle模块没什么关系。而是Python 2显示中文“乱码”的问题。
Python 2中,str是8-bit string sequence(有点像Python 3中的bytes)。而Python 3中str就相当于Python 2中的unicode。
所以,
>>>a='上海'
>>>repr(a)
"'\xc9\xcf\xba\xa3'"
>>>a#a中存储的8字节转义字符序列
'xc9xcfxbaxa3'
>>>printa#输出a,在此过程中,会对a进行解码操作,然后输出
上海
上例中,可以看到:
a = '上海'
a中实际存储的是:
'xc9xcfxbaxa3'
这样一个字节序列。它实际上是对'上海'这个unicode字符串按gbk/cp936/gb18030编码得到的(和简体中文Windows操作系统的默认编码有关)。
给你推荐一篇博客:
http://blog.csdn.net/kiki113/article/details/4062063
下面是我写的示例:
#_*_coding:gbk_*_
#TestwithPython2.7,Python3.3onWindowsXP
try:
importcPickleasp
except:
importpickleasp
address_file='address.txt'
classHuman(object):
def__init__(self,address):
self.address=address
deftxl(self):
af={'address':self.address}
print(af)
print(af['address'])
f=open(address_file,'wb')#Inpython3,usebinarymode.
#Inpython2.7,defaultprotocolis0.
#However,itis3inpython3.3.
p.mp(af,f,0)
f.close()
address='上海'
print(address)
dq=Human(address)
dq.txl()
af=open(address_file,'rb')#
print(p.load(af))
af.close()
"""
Output
----------------------------------------
Python2.7.6:
1.#-*-coding:utf-8-*-
涓婃捣
{'address':'xe4xb8x8axe6xb5xb7'}
涓婃捣
{'address':'xe4xb8x8axe6xb5xb7'}
2.#-*-coding:gbk-*-or#_*_coding:cp936_*_
上海
{'address':'xc9xcfxbaxa3'}
上海
{'address':'xc9xcfxbaxa3'}
Python3.3.3:
上海
{'address':'上海'}
上海
{'address':'上海'}
------------------------------------------
InPython3.3.3:
>>>'上海'.encode('utf-8')
b'xe4xb8x8axe6xb5xb7'
>>>_.decode('cp936')
'涓婃捣'
"""
从这个示例中可以看出,虽然把字典整个print出来不能正常解析address中的内容:
>>>addr={'addr':'上海'}
>>>addr
{'addr':'xc9xcfxbaxa3'}
>>>printaddr
{'addr':'xc9xcfxbaxa3'}
但是单独打印:
>>>addr['addr']
'xc9xcfxbaxa3'
>>>printaddr['addr']#print输出之前隐含了编码解码操作,但为何打印整个字典时输出不正常尚待研究
上海
一切OK。
所以,如果真的用Python 2的话,对于该问题可以考虑手工负责编码、解码操作(如果使用print单独打印地址信息,就不用这么麻烦了,因为这些事它帮你做了)。用Python3,就没这么多问题了。
最后补充一点,pickle模块只是提供了一种序列化Python对象的方法。所以序列化生成的文件中和想象的不一样也不足为奇。正如自由de王国所说的,只要序列化后还能够反序列化成功就行了。实际上,当protocol不是0的情况下,序列化生成的文件是二进制格式的,根本没法用记事本直接看。
Ⅱ Python绘图时如何显示中文
Python使用matplotlib.pyplot画图,需要将部分标题等内容显示为中文,但是直接输入:
pyplot.xlabel('时间')
这时生成的图片并不会将“时间”正常显示出来,而如果我们需要显示中文,有两种方法。
方式一:示例
rcParams的属性
相关推荐:《Python视频教程》
方式二:(推荐使用)
示例:
中文字体种类
Ⅲ Python 输出中文问题,真是整疯了。。。
选择# -*- coding: utf-8-*-,因为你文件编码是utf-8的。
也可以这样,形式简单一些:
#encoding:utf-8
python中有两种类型的字符串:普通的str和unicode。一般情况下,处理中文数据推荐使用unicode类型,因为这样就不用考虑编码的问题。到了显示或输出时再转换为存储类型(utf-8、GBK)。但unicode本身是不能输出的,它只是一种内部编码。
看以下示例代码:
#unicode转str,utf-8编码
u'哈哈哈哈'.encode('utf-8','ignore')
#unicode转str,GBK编码
u'哈哈哈哈'.encode('gbk','ignore')
#str转unicode,其中str为utf-8编码
'哈哈哈哈'.decode('utf-8','ignore')
Ⅳ python打印输出汉字,有一部分出现乱码怎么解决
主要“()”不要用中文括号
冒号不要用中文冒号
引号不要用中文引号
只有要打印的输入内容可以用中文的。
以上最好检查一遍,因为我打的时候经常打错,最好删了重打,因为两种括号太难区分了。
Ⅳ 请问,python打开中文字符文件,但显示不出中文怎么办
一般是编码格式的问题,python内部默认的编码格式是utf-8,常见的文本编码格式是utf-8,gbk。编码格式不不一致就会乱码。可以在代码前面申明编码格式。
Ⅵ python 2.7输出中文字符串出现错误如何解决
由于汉字不属于ASCII编码表中的字符,因此,无论是在Python交互模式还是执行模式,很多时候都无法正常输出中文。
Ⅶ Python print无法输出中文字符
这里提示语法错误。因为你没有指定文件的编码,默认情况下不能用中文。
如果代码中有中文、中文的注释,需要在文件最上面加上这一句:
#encoding:utf-8
print'哈哈哈哈哈'
这样就OK了,望采纳!
Ⅷ 为什么Python没输出中文
本地执行可以显示中文。
代码在线工具中使用以下方法
print("\u5510\u5b9d\u6743".encode('utf-8').decode('unicode_escape'))
Ⅸ python IDLE以及控制台中无法正确显示中文
Python显示中文的问题很头大,原因在于Windows中文版的编码格式是GBK,因此直接显示中文会显示乱码的问题。
因此我们可以在开头加上#_*_encoding:<>_*_ <>可以代笔:UTF8或cp936等编码。
Ⅹ python2.7.9无法输出中文
python2.7及以下,输出字符默认为标准ASCII (0- 127,也就是 byte字符),显示乱码应该是你输出的是 utf-8 编码字符串,windows控制台默认编码是gbk(可以通过命令CHCP 65001 设置为utf-8),报错是因为你输出的是 unicode 字符(包含128-255)
新人如果对编码不是很了解,那最好的解决办法就是,封装一个unicode转byte函数,对于要输出的字符,都调用这个函数,如:
defu2b(text):
ifnotisinstance(text,unicode):
returntext
returntext.encode('utf-8')