2012-12-17 74 views
2

如何連接字符串和Unicode並獲取字符串?我嘗試了以下。但這顯然不正確。Python:如何鏈接字符串和Unicode?

>>> s = 'jklö' 
>>> u = u'äpoi' 
>>> print s+u 

Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: 'ascii' codec can't decode byte 0x94 in position 3: ordinal not in range(128)

>>> unicode(s, 'latin-1')+u 
u'jkl\x94\xe4poi' 
>>> (unicode(s, 'latin1')+u).encode('latin1') 
'jkl\x94\xe4poi' 
>>> print (unicode(s, 'latin1')+u).encode('latin1') 
jklöõpoi 
+1

爲什麼它顯然不正確的? Python試圖使用默認的(ASCII)來解碼你的字節串,失敗了。然後你明確解碼's'(使用'unicode()'),所以它可以*追加結果。這是連接unicode數據的正確方法;通過使用* only * unicode對象。 –

+1

首先將字符串轉換爲unicode? –

+0

@MartijnPieters:這是不正確的,因爲最終輸出中的ä變成了Ö – domruf

回答

2

您正在嘗試解碼來自Latin-1的s但你的終端沒有使用Latin-1的編碼;檢查sys.stdin.encoding找出它是什麼。

例如,我在默認情況下cp850

>>> import sys 
>>> sys.stdin.encoding 
'cp850' 
>>> s = 'jklö' 
>>> u = u'äpoi' 
>>> s 
'jkl\x94' 
>>> u 
u'\xe4poi' 
>>> print unicode(s, 'cp850') + u 
jklöäpoi 
>>> print (unicode(s, 'cp850') + u).encode('cp850') 
jklöäpoi 
0

這似乎工作:

>>> l = s + u.encode('cp1252') 
>>> print l 
jklöäpoi 
>>> type(l) 
<type 'str'>