當執行下列級聯:更改自動STR的默認編碼到UNICODE轉換
a = u'Hello there '
b = 'pirate ®'
c = a + b # This will raise UnicodeDecodeError
在Python 2,'pirate ®'
自動通過ASCII編碼轉換爲unicode
類型。由於字符串中存在非ASCII字符序列(®
),因此它將失敗。
有沒有辦法改變這種默認編碼爲utf8?
當執行下列級聯:更改自動STR的默認編碼到UNICODE轉換
a = u'Hello there '
b = 'pirate ®'
c = a + b # This will raise UnicodeDecodeError
在Python 2,'pirate ®'
自動通過ASCII編碼轉換爲unicode
類型。由於字符串中存在非ASCII字符序列(®
),因此它將失敗。
有沒有辦法改變這種默認編碼爲utf8?
儘管它被認爲是黑客攻擊,但它是可能的。你必須重新加載sys
:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
看到這個博客帖子的這引發了潛在的問題的一些解釋: http://blog.startifact.com/posts/older/changing-the-python-default-encoding-considered-harmful.html
這可能是你唯一的選擇,但你應該知道,它可以導致進一步的問題。這就是爲什麼它不是一個簡單而容易的事情。
從Python的Unicode HOWTO:
理想情況下,你會希望能夠寫在你的語言的自然編碼文字。然後,您可以使用您最喜歡的編輯器編輯Python源代碼,該編輯器可以自然顯示重音字符,並在運行時使用正確的字符。
Python支持以任何編碼編寫Unicode文字,但是您必須聲明正在使用的編碼。這是通過包含特殊註釋作爲源文件的第一行或第二行來完成的:
#!/usr/bin/env python
# -*- coding: latin-1 -*-
u = u'abcdé'
print ord(u[-1])
這不是關於Unicode字面值。如果你有'x + y',其中x是'unicode'類型,''是'str'類型,'y'有一個utf8序列,'x + y'會產生一個異常,因爲使用默認的ascii編碼。 – Mansour 2014-09-04 05:22:15
好的,我誤解了。這樣的事情呢? c =''.join([(c.decode('utf-8')if isinstance(c,str)else c)for c in [a,b]]) – pwray 2014-09-04 13:18:32
請參閱[接受的答案](http ://stackoverflow.com/a/25658000/319954)這正是我正在尋找的。 – Mansour 2014-09-04 14:43:32
@KobiK這不是問什麼 – wRAR 2014-09-04 05:05:08
只要在任何地方使用unicode字符串,並明確地從外部世界轉換字符串。 – wRAR 2014-09-04 05:08:06
沒有辦法 - 我開始使用只接受'str'類型的模板庫,並且我的代碼使用'unicode'文字和unicode幾乎都是。 – Mansour 2014-09-04 05:10:22