本文目錄一覽:
如何進行Python編碼轉換
1、python2與python3稍微有點區別 2、python2中默認的字符編碼格式都是unicode,在字符串前加’u’,表示unicode 編碼 3、將unicode轉換成中文,只需要用deconde解碼就可以了 u=’歡迎’ e=u.encode() e b’\xe6\xac\xa2\xe8\xbf\x8e’ …
如何修改python文件的編碼格式
可以知道的是,文本文件的默認編碼並不是utf8。
我們打開一個文本文件,並點擊另存為
2
我們在新窗口的編碼一欄看到默認編碼是ANSI。先不管這個編碼是什麼編碼,但是通過下拉列表我們知道,這種編碼不是utf8。
END
編碼測試
1
對於Python裏面的中文顯示,我們常常使用utf8和gbk的編碼。對於這兩種編碼筆者就不介紹了,總之都是專門可以處理中文的編碼方式啦。
2
我們首先對文本文件測試了gbk解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用utf8解碼,程序出錯,拋出decodeError異常
3
同樣的,我們對Python腳本文件測試了utf8解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用gbk解碼,中文部分出現亂碼
4
測試說明,對於文本文件需要使用gbk解碼,而對於腳本文件需要utf8解碼,也就是說,文本文件是gbk編碼的,而腳本則是utf8
Python 編碼轉換與中文處理
python 中的 unicode 是讓人很困惑、比較難以理解的問題. 這篇文章 寫的比較好, utf-8是 unicode的一種實現方式,unicode、gbk、gb2312是編碼字符集.
Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼範圍內的字符的時候就要使用” 編碼指示 “來修正一個 module 的定義中,如果.py文件中包含中文字符(嚴格的說是含有非anscii字符),則需要在第一行或第二行指定編碼聲明: # -*- coding=utf-8 -*- 或者 #coding=utf-8
其他的編碼如:gbk、gb2312也可以;否則會出現:
先說一下python中的字符串類型,在python中有兩種字符串類型,分別是 str 和 unicode ,他們都是basestring的派生類;
在str的文檔中有這樣的一句話:
也就是說在讀取一個文件的內容,或者從網絡上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。
unicode 轉為 gb2312,utf-8等,使用 encode(encoding)
utf-8,GBK轉換為 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)
普通的 str 轉為 unicode,
如果直接執行s.encode(‘gb2312’)會發生什麼?
這裡會發生一個異常:Python 會自動的先將 s 解碼為 unicode ,然後再編碼成 gb2312。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個類型就會出錯。
拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:
對於這種情況,我們有兩種方法來改正錯誤:
s = ‘中文’
s.decode(‘utf-8’).encode(‘gb2312’) “`
import sys
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入
sys.setdefaultencoding(‘utf-8’)
str = ‘中文’
str.encode(‘gb2312’)
print open(“Test.txt”).read()
import codecs
print open(“Test.txt”).read().decode(“utf-8”)
Traceback (most recent call last):
File “ChineseTest.py”, line 3, in module
print open(“Test.txt”).read().decode(“utf-8”)
UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\ufeff’ in position 0: illegal multibyte sequence
import codecs
data = open(“Test.txt”).read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode(“utf-8”)
s = “中文”
print unicode(s, “utf-8”)
Traceback (most recent call last):
File “ChineseTest.py”, line 3, in module
s = unicode(s, “utf-8”)
UnicodeDecodeError: ‘utf8’ codec can’t decode bytes in position 0-1: invalid data
s = “中文”
print unicode(s, “gbk”)
s = “中文”
print unicode(s, “cp936”)
原創文章,作者:EOWQ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/148369.html