2014-07-15 27 views
1

遺留髮現後立即解碼:的Python:編碼

somevar.encode('utf-8').decode('utf-8') 

我們能找到的時候追趕編碼錯誤這樣的結構有用嗎?

+0

你不是在這裏正常化,所以我換了標籤。不,繞過UTF-8不會有任何影響。 –

+0

任何可以在編碼中表示的字符串都會愉快地往返。 UTF-8 [可以代表任何Unicode代碼點](http://en.wikipedia.org/wiki/UTF-8),這就是爲什麼它被設計的原因,所以這個代碼應該是一個相當昂貴的無操作。 – holdenweb

+0

它確實在Python 2中有所作爲,對吧?在此之後,返回的值始終是Unicode,無論「somevar」是否爲Python 2的「str」。 –

回答

2

實驗在Python 2.7.6解釋:

a = u"string" 
a 

輸出:u'string '

b = a.encode('utf-8').decode('utf-8') 
b 

輸出:u'string'

b = a.decode('utf-8').encode('utf-8') 
b 

輸出: '字符串'

a = "string" 
a 

輸出: '串'

b = a.encode('utf-8').decode('utf-8') 
b 

輸出:u'string」

b = a.decode('utf-8').encode('utf-8') 
b 

輸出: '串'

而且,原字符串是否是Unicode與否,輸出編碼 - >解碼將是一個Unicode字符串。 decode - > encode的輸出不會是一個unicode字符串。儘管如此,值得注意的是,由於字符串是不可變的,所以除了檢查UnicodeErrors之外,因爲它沒有捕獲函數調用的返回值,所以您發佈的代碼行對於其他任何東西都是無用的。

編碼 - >解碼結構的唯一真正效果是所有通過它的字符串(並從返回中捕獲)都是Unicode字符串。爲什麼你會想這樣做,而不是unicode_string = unicode(normal_string, encoding='UTF-8')我不知道。