我使用python 2.7,我从服务器(不是unicode!)收到字符串。 在该字符串中,我找到了带有unicode转义序列的文本。例如:
<a href = "http://www.mypage.com/\u0441andmoretext">\u00b2<\a>
如何将\uxxxx
转换回utf-8?我找到的答案要么是处理&#
还是要求eval()
,这对我来说太慢了。对于包含此类后遗症的任何文本,我需要一个通用的解决方案。
编辑:
<\a>
是一个拼写错误,但我也希望能够容忍这种拼写错误。应该只对\u
示例文本用适当的python语法表示如下:
"<a href = \"http://www.mypage.com/\\u0441andmoretext\">\\u00b2<\\a>"
所需的输出是正确的python语法
"<a href = \"http://www.mypage.com/\xd1\x81andmoretext\">\xc2\xb2<\\a>"
答案 0 :(得分:5)
尝试
>>> s = "<a href = \"http://www.mypage.com/\\u0441andmoretext\">\\u00b2<\\a>"
>>> s.decode("raw_unicode_escape")
u'<a href = "http://www.mypage.com/\u0441andmoretext">\xb2<\\a>'
然后你可以像往常一样编码为utf8。
答案 1 :(得分:1)
Python确实包含一些特殊的字符串编解码器,用于这样的情况。
在这种情况下,如果32-127范围之外没有其他字符,您可以使用“unicode_escape”编解码器安全地解码字节字符串,以在Python中使用正确的Unicode文本对象。 (您的程序应该在其上执行所有文本操作) - 无论何时再次输出该文本,都会像往常一样将其转换为utf-8:
.login {
width: 250px;
height: 40px;
color: white;
font-family: Arial;
font-size: 20px;
font-weight: bold;
text-align: center;
background-color: #2E2E2E;
border-bottom: 1px solid orange;
border-top: none;
border-left: none;
border-right: none;
}
.login_pw {
width: 250px;
height: 40px;
color: white;
font-family: Arial;
font-size: 20px;
font-weight: bold;
text-align: center;
border-bottom: 1px solid orange;
border-top: none;
border-left: none;
border-right: none;
margin-left: 20px;
background-color: #2E2E2E;
}
如果32-127范围之外还有其他字节,则为unicode_escape编解码器 假设它们处于latin1编码中。因此,如果您的响应混合了utf-8和这些\ uXXXX序列,您必须: