python編碼問題總結

2021-07-03 03:52:46 字數 1589 閱讀 9252

1、python內部預設是使用unicode儲存內容的;

2、python解析器讀取原始檔,預設是使用ascii編碼的,如果檔案中存在中文,則會報錯,形如:

syntaxerror: non-ascii character '\xe5' in file f:/workspace/test.py

此時可以在原始檔開頭加上支援中文的編碼宣告:#coding:gbk 或者 #coding:utf-8

需要注意的是,windows命令列的預設編碼是gbk,所以當你使用 #coding:utf-8時,在命令列顯示的內容與實際內容是不同的。

例如:

#coding:utf-8

s1 = '哈'

print(s1)

在命令列顯示的結果是:鍝

3、str與unicode

str其實是位元組串,它是unicode經過編碼後的位元組組成的序列。

#coding:utf-8

s1 = '哈'#哈 按著utf-8編碼進行儲存

print(type(s1)) #str

print(len(s1)) #結果是3 '\xe5\x93\x88'

s2 = u'哈' #哈按著unicode編碼進行儲存

print(type(s2)) #unicode

print(len(s2)) #結果是1

python對於unicode物件print的時候,會根據終端編碼進行自適應。所以使用unicode輸出時肯定能得到你想要的結果。

上面的u'哈' 等同與 unicode('哈','utf-8') 或者 '哈'.decode('utf-8')

4、str和repr

函式str() 用於將值轉化為適於人閱讀的形式,而repr() 轉化為供直譯器讀取的形式。

h = "hello\n"

print(h) #hello

print(repr(h)) #'hello\n'

print(eval(repr(h))) #hello

5、列印list物件等

ls1 = ["哈","哈1"]

for x in ls1:

print(x)

print(ls1)

輸出結果為:哈哈1

["\xe5\x93\x88", '\xe5\x93\x881']

可見直接print乙個list,輸出結果是repr的內容。

那如何直接print乙個list的時候直接顯示中文呢?

可以使用:

print(str(ls1).decode("string_escape"))

輸出的結果就是:['哈', '哈1']

其中"string_escape"就是要按照人熟悉的方式顯示出來。還有類似的"unicode_escape"。

python 編碼問題總結

python 編碼問題總結 2010 05 12 15 07 問題一 當python中間處理非ascii編碼時,經常會出現如下錯誤 unicodedecodeerror ascii codec can t decode byte 0x?in position 1 ordinal not in ran...

python 編碼問題總結

1 簡而言之,python 2.x裡字串有兩種 str和unicode 前者到後者要decode,後者到前者要encode,utf 8 為例 str.decode utf 8 unicode str unicode.encode utf 8 總結 unicode就像是中間橋梁,utf 8編碼,gbk...

python編碼問題總結

最近利用python抓取一些網上的資料,遇到了編碼的問題。非常頭痛,總結一下用到的解決方案。import chardet f open file r fencoding chardet.detect f.read print fencoding fencoding輸出格式 只能判斷是否為某種編碼的概...