2014-10-11 41 views
0

我有這樣一個清單:編碼字符不在列表中?

print alist  
['G\xc3\xbcnther', 'Santher'] 

並希望將其更改爲:

['Günther', 'Santher'] 

我嘗試了很多的東西,如:

alist=[s.encode("utf-8") for s in alist] 
print alist 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128) 

在別人的字半滑舌鰨變丟失,或者G \ xc3 \ xbcnther保持不變。我究竟做錯了什麼?

回答

2

一切正常在這裏罰款,你只是從API中錯誤的事情。

打印一個對象,而不是一個字符串,首先將其轉換爲一個字符串。在這種情況下,列表將轉換爲表示Python表達式的字符串,該表達式在輸入時將計算爲相同的列表。這是顯示列表最有用的方法:您可以看到內容,有時只是轉義。

比較:

>>> a = ['test\'test\"test', 0, '0'] 

>>> print a[0] 
test'test"test 

>>> print a 
['test\'test"test', 0, '0'] 

ü以UTF-8編碼爲兩個字節:\xc3\xbc。因此,如果在UTF-8終端中打印字符串'G\xc3\xbcnther',您將看到Günther。如果將它保存到一個文件並在一個正常的文本編輯器中打開該文件,它將顯示Günther(也許你必須稍微戳一下編碼設置)。對於所有意圖和目的,這是將「Günther」一詞存儲在字節串中的最佳方式。

如果您想以良好的方式打印列表,您可以自己設置格式。例如,如果它是一個字符串列表,就像在你的榜樣,join將工作不錯:

>>> print '; '.join(['G\xc3\xbcnther', 'Santher']) 
Günther; Santher 

(順便說一句:你可以不編碼字節串,它已經編碼你可以,但是,解碼它。)

1

代碼顯示表示形式地看到,在字符串形式使用本:

print alist[0] 

蟒蛇保存的Unicode字符一樣,沒有辦法改變這個:)

+0

所以我不能改變名單?真? – 2014-10-11 17:17:36

+0

這個沒有問題,風格屬於python。 – lxmahyar 2014-10-11 17:22:05

+0

有沒有可能在該列表中的「\ xc3 \ xbc」中創建「ü」?某種解決方法?從列表中取出一個字符串? – 2014-10-11 17:25:32