2016-12-29 41 views
1

我的琴絃是這樣\\xec\\x88\\x98,但如果我打印出來,就像這樣\xec\x88\x98,當我解碼他們,他們看起來像這樣\xec\x88\x98包含雙blackslashes解碼Python的Unicode字符串

如果我手動鍵入字符串作爲\xec\x88\x98然後解碼它,我得到我想要的值

如果我x.decode('unicode-escape')它刪除雙斜線,但是當解碼由x.decode('unicode-escape')返回的值時,我得到的值是ì

我將如何去解碼原始\\xec\\x88\\x98,以便我得到正確的輸出值?

+0

[This](http://stackoverflow.com/questions/29805425/python-2-7-how-to-convert-unicode-escapes-in-a-string-into-actual-utf-8-charact )似乎可能有用。 – TigerhawkT3

+0

您應該使用您正在使用的Python版本_always_標記Unicode問題,因爲Python 2中的Unicode處理與Python 3中的Unicode處理方式完全不同。 –

+0

這是python 2還是3?顯示轉義字符串可能會引起混淆......你能向我們展示字符串的'repr'(你可以輸入python來獲取字符串)嗎?一個好的方法是'print(repr(x))',然後發佈引號和所有內容。 – tdelaney

回答

1

在Python 2中,您可以使用'string-escape' codec'\\xec\\x88\\x98'轉換爲'\xec\x88\x98',這是u'\uc218'的UTF-8編碼。

這是一個簡短的演示。不幸的是,我的終端字體沒有那個字符,所以我不能打印它。相反,我將打印它的名稱和它的表示形式,並將其轉換爲Unicode轉義序列。

import unicodedata as ud 

src = '\\xec\\x88\\x98' 
print repr(src) 

s = src.decode('string-escape') 
print repr(s) 

u = s.decode('utf8') 
print ud.name(u) 
print repr(u), u.encode('unicode-escape') 

輸出

'\\xec\\x88\\x98' 
'\xec\x88\x98' 
HANGUL SYLLABLE SU 
u'\uc218' \uc218 

然而,這是一個 「創可貼」 的解決方案。您應該嘗試在上游(在您的Web Spider中)修復此問題,以便以普通的UTF-8而不是您正在獲取的字符串轉義的UTF-8接收數據。

+0

''字符串轉義'似乎解決了我的問題。另外,謝謝你的提示! – jwnz

相關問題