在Python 3中将单反斜杠转换为双反斜杠

nar*_*nie 4 replace escaping backslash python-3.x

我有一个像这样的字符串:

>>> t
'\\u0048\\u0065\\u006c\\u006c\\u006f\\u0020\\u20ac\\u0020\\u00b0'
Run Code Online (Sandbox Code Playgroud)

我使用的函数将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'
Run Code Online (Sandbox Code Playgroud)

当然,我也不能这样做:

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

Roc*_*key 7

不确定这是否适合您的情况,但您可以尝试使用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 € °'
Run Code Online (Sandbox Code Playgroud)

或者缩写形式:

>>> t.encode('utf_8').decode('unicode_escape')
'Hello € °'
Run Code Online (Sandbox Code Playgroud)

你使用你的字符串并对其进行编码UTF-8,然后使用它进行解码unicode_escape.