2014-10-11 60 views
3

我有以下形式的字符串:評估UTF-8文字轉義序列在字符串中Python3

s = '\\xe2\\x99\\xac' 

我想通過評估轉義序列將其轉換爲字符♬。但是,我嘗試過的所有內容都會導致錯誤或打印出垃圾。我如何強制Python將轉義序列轉換爲文字unicode字符?

我在別處看過的內容表明,下面這行代碼應該做我想做的事情,但它會導致UnicodeEncodeError。

print(bytes(s, 'utf-8').decode('unicode-escape')) 

我也試過以下,它具有相同的結果:

import codecs 
print(codecs.getdecoder('unicode_escape')(s)[0]) 

這兩種方法產生的字符串「A \x99¬」,它打印隨後無法處理。

如果有任何區別,字符串將從UTF-8編碼文件讀入,並且在處理後最終會輸出到不同的UTF-8編碼文件。

回答

5

...decode('unicode-escape')會給你字符串'\xe2\x99\xac'

>>> s = '\\xe2\\x99\\xac' 
>>> s.encode().decode('unicode-escape') 
'â\x99¬' 
>>> _ == '\xe2\x99\xac' 
True 

您需要對其進行解碼。但要解碼它,首先用latin1(或iso-8859-1)對其進行編碼以保留字節。

>>> s = '\\xe2\\x99\\xac' 
>>> s.encode().decode('unicode-escape').encode('latin1').decode('utf-8') 
'♬' 
+0

非常感謝!這工作完美。 – 2014-10-11 15:11:08

+0

嘿,這對我在控制檯中工作正常,但我不能讓它在我的程序(我從文件中讀取文本)中工作。 – fallaciousreasoning 2015-09-15 04:07:48

+0

@fallaciousreasoning,你可以發表一個可重現的示例代碼的問題嗎? – falsetru 2015-09-15 04:23:59