2014-09-04 54 views
1

當執行下列級聯:更改自動STR的默認編碼到UNICODE轉換

a = u'Hello there ' 
b = 'pirate ®' 
c = a + b # This will raise UnicodeDecodeError 

在Python 2,'pirate ®'自動通過ASCII編碼轉換爲unicode類型。由於字符串中存在非ASCII字符序列(®),因此它將失敗。

有沒有辦法改變這種默認編碼爲utf8?

+0

@KobiK這不是問什麼 – wRAR 2014-09-04 05:05:08

+0

只要在任何地方使用unicode字符串,並明確地從外部世界轉換字符串。 – wRAR 2014-09-04 05:08:06

+0

沒有辦法 - 我開始使用只接受'str'類型的模板庫,並且我的代碼使用'unicode'文字和unicode幾乎都是。 – Mansour 2014-09-04 05:10:22

回答

0

從Python的Unicode HOWTO:

理想情況下,你會希望能夠寫在你的語言的自然編碼文字。然後,您可以使用您最喜歡的編輯器編輯Python源代碼,該編輯器可以自然顯示重音字符,並在運行時使用正確的字符。

Python支持以任何編碼編寫Unicode文字,但是您必須聲明正在使用的編碼。這是通過包含特殊註釋作爲源文件的第一行或第二行來完成的:

#!/usr/bin/env python 
# -*- coding: latin-1 -*- 

u = u'abcdé' 
print ord(u[-1]) 
+1

這不是關於Unicode字面值。如果你有'x + y',其中x是'unicode'類型,''是'str'類型,'y'有一個utf8序列,'x + y'會產生一個異常,因爲使用默認的ascii編碼。 – Mansour 2014-09-04 05:22:15

+0

好的,我誤解了。這樣的事情呢? c =''.join([(c.decode('utf-8')if isinstance(c,str)else c)for c in [a,b]]) – pwray 2014-09-04 13:18:32

+0

請參閱[接受的答案](http ://stackoverflow.com/a/25658000/319954)這正是我正在尋找的。 – Mansour 2014-09-04 14:43:32