在python2中有兩種型別的字串:str和unicode。二者的轉換如下:
unicode字串通過encode函式轉換為str字串,稱為編碼;
str字串通過decode函式轉化為unicode字串,稱為解碼.
下面以print列印為例進行說明:
當字串為str型別時,作業系統直接將其交給終端進行顯示;1. non-ascii character錯誤當字串為unicode型別時,作業系統會先將其編碼為str型別,然後交給終端顯示。
例子:
import sys
print
(sys.getdefaultencoding())
print
(sys.stdout.encoding)
# 列印stdout的編碼方式
a ="測試"
b = u"測試"
print
(a)print
(b)
錯誤:
syntaxerror: non-ascii character '\xe6'
infile t.py on line 7, but no encoding declared; see for details
原因及改進:
該python檔案存在中文字元,但是檔案本身並未指定編碼方式,此時python會按照系統的預設編碼(ascii)執行該python檔案,因此報錯了。可以在檔案的開頭新增# coding:utf-8
即可解決該問題。
2. unicodeencodeerror錯誤
例子:
# coding: utf-8
import sys
print
(sys.getdefaultencoding())
print
(sys.stdout.encoding)
# 列印stdout的編碼方式
a ="測試"
b = u"測試"
print
(a)print
(b)
錯誤:
unicodeencodeerror: 'ascii' codec can't encode characters in position
原因及改進:
由於變數b為unicode型別,因此print(b)時作業系統需要先按照stdout的預設編碼將其編碼為str型別,最後交給終端顯示;但是stdout的編碼為ascii(通過呼叫sys.stdout.encoding), 因此報錯。可以通過指明編碼方式即print(b.encode('utf-8'))
解決。
3. unicodedecodeerror錯誤
例子:
# coding: utf-8
import sys
print
(sys.getdefaultencoding())
print
(sys.stdout.encoding)
a ="測試"
b = u"測試"
print
(a.decode())
print
(b.encode(
'utf-8'
))
錯誤:
unicodedecodeerror: 'ascii' codec can't decode byte 0xe6 in position
原因及改進:
執行print(a.decode())
時由於沒有指明解碼方式,因此使用了sys.getdefaultencoding()
的預設編碼(ascii),因此報錯;可以通過指定解碼方式即print(a.decode('utf-8'))
解決。
Python2字串編碼問題總結
發表於2016年 05月 29日 python2.7中的字串編碼問題的關鍵是 str其實並不是字串而是位元組串 八位二進位制資料串 而unicode字串物件才是真正的字串。所以只要弄清楚str位元組串中儲存的到底是什麼編碼格式的二進位制資料即可解決編碼問題。1,原始碼檔案 py.pyw 編碼問題。只...
python 2 字串和元組
一 字串 1.建立 單引號,雙引號,三引號 轉義字元 n,t 2.特性 索引 切片 s start stop step start預設值為0,stop預設值為字串長度,step預設值為1,步長 例如 s 1 4 2 s 1 s 4 s 1 連線操作 a b 重複操作 2 a aa 成員操作符 某成員...
167 字串解碼
題目描述 給定乙個經過編碼的字串,返回它解碼後的字串。編碼規則為 k encoded string 表示其中方括號內部的 encoded string 正好重複 k 次。注意 k 保證為正整數。你可以認為輸入字串總是有效的 輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。此外,你可以認為...