2011-09-13 41 views
3

我使用內置的分裂功能,我有一個問題:如何使用utf8編碼進行分割?

>>> data = "test, ąśżźć, test2" 
>>> splitted_data = data.split(",") 
>>> print splitted_data 
['test', ' \xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87', ' test2'] 

這是爲什麼發生?我應該怎麼做才能防止這種情況?

的Python 2.7.1

+2

您對此有何看法?嘗試'print splitted_data [1]'您正在查看內部表示 –

回答

6

內部表示這是純粹從str.__repr__得到的輸出(調用repr()在一根繩子上)。 \xc4等只是它存儲的實際方式。當您打印它,它仍然是相同的:

>>> data = "test, ąśżźć, test2" 
>>> data 
'test, \xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87, test2' 
>>> print data 
test, ąśżźć, test2 

list.__str__list.__repr__使用字符串的表示,但如果你訪問它裏面的項目,它仍然是正確的:

>>> splitted_data = data.split(",") 
>>> splitted_data 
['test', ' \xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87', ' test2'] 
>>> print splitted_data[1] 
ąśżźć 
1

當你的片斷作品(逃逸是多麼repr作品),你不應該把字節串爲文本。先解碼,稍後再操作。

data  = u"test, ąśżźć, test2" # or "test, ąśżźć, test2".decode('utf-8') 
split_data = data.split(u",") 
0

您正在尋找的splitted_data

data = "test, åäö, test2" 
data 
'test, \xe5\xe4\xf6, test2' 

data.split()[1] 
'\xe5\xe4\xf6,' 

print data.split()[1] 
åäö, 
0

至於說每個人都否則,你的程序沒有任何問題。由於Python選擇的打印列表的展示不是包含字符串的列表,因此您的期望得不到滿足。與以下內容進行比較:

>>> data = "test, ąśżźć, test2" 
>>> a,b,c = data.split(",") 
>>> print a,b,c 

test ąśżźć test2