概括、從python1.6開始就可以處理unicode字元了。
一、幾種常見的編碼格式。
1.1、ascii,用1個位元組表示。
1.2、utf-8,用1個至三個位元組表示,表示ascii碼時只占用1個位元組,ascii編碼是utf-8的子集。
1.3、utf-16,用2個位元組表示,在python中,unicode的含義就是utf-16。
二、python原始檔的編碼與解碼,我們寫的python程式從產生到執行的過程如下:
編輯器---->源**---->直譯器---->輸出結果
2.1、編輯器決定源**的編碼格式(在編輯器中設定)
2.2、也必須要直譯器知道源**的編碼格式(很遺憾很難從編碼的資料獲知原始檔的編碼格式)
2.3、補充:在windows下當用ultraedit把源**存成utf-8時,會在檔案中記錄bom標誌(不必祥究)這樣activepython直譯器會自動識別原始檔是utf-8格式,但是如果用
eclipse
編輯原始檔,雖然在編輯器中指定檔案編碼為utf-8,但是因為沒有記入bom標誌,所以必須在原始檔開始處加上
#coding=utf-8,
用注釋來提示直譯器原始檔的編碼方式挺有意思。
2.4、舉例:例如我們要向終端輸出"我是中國人"。
#coding=utf-8 告訴python直譯器用的是utf-8編碼,我用的是eclipse+pydev
print "我是中國人" #原始檔本身也要存成utf-8編碼
2.5、當然我們可以用其他unicode編碼,例如gb2312,shift_jis等等,但是建議用utf-8,表示的字元更多,例如能同時顯示中文和日文字元。
三、編碼的轉換,兩種編碼的轉換要用utf-16作為中轉站。
舉例:如果有乙個文字檔案jap.txt,裡面有內容 "私は中國人です。",編碼格式是日文編碼shift_jis,
還有乙個文字檔案chn.txt,內容是"中華人民共和國",編碼格式是中文編碼gb2312。
我們如何把兩個檔案裡的內容合併到一起並儲存到utf.txt中並且不顯示亂碼呢,可以採用把兩個檔案的內容都轉成utf-8格式,因為utf-8裡包含了中文編碼和日文編碼。
#coding=utf-8
try:
jap=open("e:/jap.txt","r")
chn=open("e:/chn.txt","r")
utf=open("e:/utf.txt","w")
jap_text=jap.readline()
chn_text=chn.readline()
#先decode成utf-16,再encode成utf-8
jap_text_utf8=jap_text.decode("shift_jis").encode("utf-8") #不轉成utf-8也可以
chn_text_utf8=chn_text.decode("gb2312").encode("utf-8")#編碼方式大小寫都行utf-8也一樣
utf.write(jap_text_utf8)
utf.write(chn_text_utf8)
except ioerror,e:
print "open file error",e
四、tk庫支援ascii,utf-16,utf-8
#coding=utf-8
from tkinter import *
try:
jap=open("e:/jap.txt","r")
str1=jap.readline()
except ioerror,e:
print "open file error",e
root=tk()
label1=label(root,text=str1.decode("shift_jis")) #如果沒有decode則顯示亂碼
label1.grid()
root.mainloop()
五、字串相關
1、預設情況下字串的編碼格式和原始碼的編碼格式一致。
2、如果在字串前面加上u,則字串會採用unicode編碼。
python中編碼unicode和utf 8
在python中的字串記憶體中是用unicode進行編碼 python2 s 我愛你python su u 我愛你python s.encode utf 8 traceback most recent call last file line 1,in unicodedecodeerror ascii...
python2 7響應資料中unicode轉中文
print 響應結果 s r.content.decode unicode escape 一 在爬蟲抓取網頁資訊時常需要將類似 u4eba u751f u82e6 u77ed uff0cpy u662f u5cb8 轉換為中文,實際上這是unicode的中文編碼。可用以下方法轉換 1 1 s u u...
unicode 在python3中的編碼問題
u u 表示unicode字串 example u string 不是僅僅是針對中文,可以針對任何的字串,代表是對字串進行unicode編碼。一般英文本元在使用各種編碼下,基本都可以正常解析,所以一般不帶u 但是中文,必須表明所需編碼,則一旦編碼轉換就會出現亂碼。建議所有編碼方式採用utf8 r r...