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經過編碼後的位元組組成的序列。
python對於unicode物件print的時候,會根據終端編碼進行自適應。所以使用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
上面的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輸出格式 只能判斷是否為某種編碼的概...