Python 2.7:如何将字符串中的unicode转义转换为实际的utf-8字符

时间:2015-04-22 17:55:36

标签: python string utf-8 converter unicode-escapes

我使用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>"

2 个答案:

答案 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序列,您必须:

  1. 使用utf-8
  2. 解码原始字符串
  3. 编码回latin1
  4. 使用“unicode_escape”进行解码
  5. 处理文本
  6. 编码回utf-8