2016-12-29 75 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