Python 的編碼
文章推薦指數: 80 %
py 檔案想要是UTF-8 以外的編碼,同樣必須在第一行放置編碼聲明。
# coding=Big5 text = '測試' print( ...
回Encoding目錄
在Python2.x,程式中所有字串,其實都是原始位元組集合。
如果原始碼中寫了非ASCII字元串,必須在第一行放置編碼聲明(encodingdeclaration)。
例如:
#coding=Big5
text='測試'
printlen(text)#顯示4
程式會顯示4而不是2,因為Big5每個中文字佔兩個位元組,而兩個中文字就佔四個位元組,所以上例中,len()實際上是計算出'測試'兩字Big5編碼實現下的位元組長度。
為了支援Unicode,Python2.x提供了u前置字來產生unicode物件。
#coding=Big5
text=u'測試'
printtype(text)#顯示
ord()可接受str或unicode實例,分別傳回其ASCII編碼或Unicode碼點。
例如:
>>>chr(65)
'A'
>>>unichr(65)
u'A'
>>>unichr(28204)
u'\u6e2c'
>>>ord('A')
65
>>>ord(u'A')
65
>>>ord(u'測')
28204
>>>
如果有一個str實例,可以使用unicode()方法並指定實現編碼,或者使用str的decode方法並指定實現編碼,將之轉換為unicode物件。
unicode的encode()方法則可指定實現編碼,將之轉為代表位元組實現的str實例。
例如:
>>>text=u'測試'
>>>b_str=text.encode('big5')
>>>type(b_str)
例如若有個UTF-8的文字檔案text.txt中記錄了「測試」兩字,則程式讀取時可如下:
withopen('text.txt','r')asf:
b_str=f.read()
printb_str.decode('utf-8')#自行判斷標準輸出編碼
printb_str.decode('utf-8').encode('big5')#標準輸出編碼為big5
以上最後兩句都會在標準輸出顯示「測試」兩字。
類似地,如果要將unicode寫入文字檔案,必須使用encode()轉換為指定編碼實現。
例如,以下程式可將「測試」以Big5編碼寫入文字檔案:
#coding=utf-8
text=u'測試'
b_str=text.encode('big5')
withopen('text.txt','w')asf:
f.write(b_str)
在Python3.x中,預設.py檔案必須是UTF-8編碼。
如果.py檔案想要是UTF-8以外的編碼,同樣必須在第一行放置編碼聲明。
#coding=Big5
text='測試'
print(len(text))#顯示2
Python3.x中的字串都是Unicode,因此上例最後是顯示2,表示兩個字元,而不是像Python2.x中,會顯示字串實際的位元組長度。
在Python3中,每個字串都是Unicode,不使用內部編碼表現,而使用str實例作為代表。
如果想將字串轉為指定的編碼實作,可以使用encode()方法取得一個bytes實例,如果有個bytes實例,也可以使用decode()方法指定編碼取得str實例:
>>>'元'.encode('big5')
b'\xa4\xb8'
>>>'元'.encode('utf-8')
b'\xe5\x85\x83'
>>>'元'.encode('big5').decode('big5')
'元'
>>>
如果要將資料寫入檔案或從檔案讀出,可以使用open()函式,其中可以指定編碼:
open(file,mode="r",buffering=None,encoding=None,
errors=None,newline=None,closefd=True)
例如,若要讀取UTF-8文字檔案:
name=input('請輸入檔名:')
withopen(name,'r',encoding='UTF-8')asfile:
content=file.read()
print(content)
讀入的結果為str實例。
若要將str實例寫入Big5編碼文字檔案可如下:
name=input('請輸入檔名:')
withopen(name,'w',encoding='Big5')asfile:
file.write('test')
延伸文章資訊
- 1Python中关于coding=utf-8以及中文字符前加u的解释 - CSDN博客
写了很久的Python了,每次写之前都要在开头加上coding=utf-8,只知道是设置编码格式,但并没有太在意,今天在写socket编程时才发现编码格式的重要性。
- 2Python中的encoding=utf-8是什么意思? - 知乎
coding=utf-8的作用是. 声明python代码的文本格式是utf-8编码,. 也即告诉python解释器要按照utf-8编码的方式来 ...
- 3Python 的Big5 與UTF-8 檔案編碼轉換程式教學 - Office 指南
介紹如何使用簡單的Python 程式處理Big5 與UTF-8 檔案的編碼轉換問題。 Big5 與UTF-8 的編碼轉換是在中文資料處理上常見的問題之一,以下介紹如何使用Python 來 ...
- 4Python 中文编码 - 菜鸟教程
Python中默认的编码格式是ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。 解决方法为只要在文件开头加入# -*- coding: UTF-8 -*- 或者# ...
- 5Python 的編碼
py 檔案想要是UTF-8 以外的編碼,同樣必須在第一行放置編碼聲明。 # coding=Big5 text = '測試' print( ...