1樓:匿名使用者
實際上,這段**所出現的問題和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位元組轉義字元序列
'\xc9\xcf\xba\xa3'
>>> print a # 輸出a,在此過程中,會對a進行解碼操作,然後輸出
上海上例中,可以看到:
a = '上海'
a中實際儲存的是:
'\xc9\xcf\xba\xa3'
這樣一個位元組序列。它實際上是對'上海'這個unicode字串按gbk/cp936/gb18030編碼得到的(和簡體中文windows作業系統的預設編碼有關)。
給你推薦一篇部落格:
下面是我寫的示例:
# _*_ coding: gbk _*_
# test with python 2.7, python 3.3 on windows xp
try:
import cpickle as p
except:
import pickle as p
address_file = 'address.txt'
class human(object):
def __init__(self, address):
self.address = address
def txl(self):
af =
print(af)
print(af['address'])
f = open(address_file, 'wb') # in python 3, use binary mode.
# in python 2.7, default protocol is 0.
# however, it is 3 in python 3.3.
p.dump(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
----------------------------------------
python 2.7.6:
1. # -*- coding: utf-8 -*-
涓婃搗涓婃搗
2. # -*- coding: gbk -*- or # _*_ coding: cp936 _*_
上海上海
python 3.3.3:
上海上海
------------------------------------------
in python 3.3.3:
>>> '上海'.encode('utf-8')
b'\xe4\xb8\x8a\xe6\xb5\xb7'
>>> _.decode('cp936')
'涓婃搗'
"""從這個示例中可以看出,雖然把字典整個print出來不能正常解析address中的內容:
>>> addr =
>>> addr
>>> print addr
但是單獨列印:
>>> addr['addr']
'\xc9\xcf\xba\xa3'
>>> print addr['addr'] # print 輸出之前隱含了編碼解碼操作,但為何列印整個字典時輸出不正常尚待研究
上海一切ok。
所以,如果真的用python 2的話,對於該問題可以考慮手工負責編碼、解碼操作(如果使用print單獨列印地址資訊,就不用這麼麻煩了,因為這些事它幫你做了)。用python3,就沒這麼多問題了。
最後補充一點,pickle模組只是提供了一種序列化python物件的方法。所以序列化生成的檔案中和想象的不一樣也不足為奇。正如自由de王國所說的,只要序列化後還能夠反序列化成功就行了。
實際上,當protocol不是0的情況下,序列化生成的檔案是二進位制格式的,根本沒法用記事本直接看。
2樓:自由de王國
你用的是pickle,它寫入檔案的內容不是讓人讀的,而是讓pickle讀的,所以你不用在意。你自己寫檔案試試,應該是漢字。
3樓:夢裡瀟瀟
是漢字亂碼嗎?
開始加上下面這句話
# -*- coding: utf-8 -*-
4樓:匿名使用者
庫不對 3.x就沒這個問題了
python279無法輸出中文
python2.7及以下,輸出字元預設為標準 ascii 0 127,也就是 byte字元 顯示亂碼應該是你輸出的是 utf 8 編碼字串,windows控制檯預設編碼是gbk 可以通過命令 chcp 65001 設定為utf 8 報錯是因為你輸出的是 unicode 字元 包含128 255 新人...
python內建模組無法呼叫,pycharm環境,怎麼辦
因為你執行的是 headers.py 不是 練習.py pycharm下無法匯入安裝好的第三方模組requests?在cmd下使用pip安裝好requests模組後,可以使用import requests,但在pycharm ide下無法匯入,出現如下錯誤 import requests trace...
無法顯示語言欄
1全部看你是使用2003 還是xp系統 要是xp系統的話了就設定兩個地方 1.開始,執行,msconfig,勾選ctfmon.exe控制面板 區域和語言選項 語言 詳細資訊 高階 不要選 關閉高階文字服務 2.開始 控制面板 日期 時間 語言和區域設定 區域和語言選擇 語言 詳細資訊 語言欄 選擇在...