6

我有一个这样的字符串:

>>> t
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'

我使用一个函数将 unicode 转换为代表性的 Python 转义序列。然后,当我想将其转换回来时,我无法摆脱双反斜杠,以便再次将其解释为 unicode。如何才能做到这一点?

>>> t = unicode_encode("
>>> t
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'
>>> print(t)
\u0048\u0065\u006c\u006c\u006f\u0020\u20ac\u0020\u00b0    
>>> t.replace('\\','X')
'Xu0048Xu0065Xu006cXu006cXu006fXu0020Xu20acXu0020Xu00b0'
>>> t.replace('\\', '\\')
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'

当然,我也不能这样做:

>>> t.replace('\\', '\')
  File "<ipython-input-155-b46c447d6c3d>", line 1
    t.replace('\\', '\')
                         ^
SyntaxError: EOL while scanning string literal
4

3 回答 3

9

不确定这是否适合您的情况,但您可以尝试使用unicode_escape

>>> t
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'
>>> type(t)
<class 'str'>
>>> enc_t = t.encode('utf_8')
>>> enc_t
b'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'
>>> type(enc_t)
<class 'bytes'>
>>> dec_t = enc_t.decode('unicode_escape')
>>> type(dec_t)
<class 'str'>
>>> dec_t
'Hello € °'

或缩写形式:

>>> t.encode('utf_8').decode('unicode_escape')
'Hello € °'

您获取字符串并使用 对其进行编码UTF-8,然后使用 对其进行解码unicode_escape

于 2013-01-22T07:00:09.010 回答
0

您的代码中只有一个反斜杠,但反斜杠表示为\\. 如您所见,当您使用 时print(),只有一个反斜杠。所以如果你想摆脱两个反斜杠之一,不要做任何事情,它不存在。如果你想摆脱两者,只需删除一个。再次用于\\表示一个反斜杠:t.replace("\\", "")

所以你的字符串一开始就没有两个反斜杠,这不应该是问题。

于 2013-01-22T07:10:21.360 回答
0

由于反斜杠是转义字符,并且您正在搜索两个反斜杠,因此您需要将四个反斜杠替换为两个- 即:

t.replace("\\\\", "\\")

这将替换r"\\"r"\". 表示原始r字符串。因此,例如,如果您输入print(r"\\")idle 或任何 python 脚本(或print r"\\"在 Python 2 中),您将获得\\\\. 这意味着 every"\\"真的只是一个r"\".

user1632861 建议您使用.replace("\\", ""),但这将永远取代任何r"\"内容。请改用上述方法。:D

但是,在这种情况下,您似乎正在读取/接收数据,并且您可能希望使用正确的编码然后解码为 un​​icode(正如我上面的人所建议的那样)。

于 2014-08-05T19:05:47.263 回答