Python 2.7将%(百分比)替换为\(斜杠)但得到\\(双斜杠)

时间:2018-10-13 18:43:35

标签: python python-2.7 replace slash

我想要这个结果:

bc::transform(begin_a, end_a, begin_b, result.begin(), bc::atan2<float>()); // atan(b/a)
bc::system::default_queue().finish();

但是它总是给我:

u'\ue8fc\x82'

示例1:

u'\\ue8fc\\u0082'

示例2:

>>> a='\ue8fc\u0082'

>>> a
'\\ue8fc\\u0082'

>>> print a
\ue8fc\u0082

>>> unicode(a)
u'\\ue8fc\\u0082'

>>> unicode(a).replace('\\\\','\\')
u'\\ue8fc\\u0082'

>>> repr(unicode(a).replace('\\\\','\\'))
"u'\\\\ue8fc\\\\u0082'"

>>> repr(unicode(b).replace('\\','?'))
"u'?ue8fc?u0082'"

>>> repr(unicode(b).replace('\\','?').replace('?','\\'))
"u'\\\\ue8fc\\\\u0082'"

为什么我需要这个:

我想转身

  

'%ue8fc%u0082'

进入

  

'\ ue8fc \ u0082'

2 个答案:

答案 0 :(得分:2)

用于表示Unicode字符的反斜杠实际上不是字符串的一部分,并且不能使用str.replace进行操纵。但是,可以使用“ unicode_escape”编码将带有“真实”反斜杠的字符串转换为转义的字符串:

>>> s = "%ue8fc%u0082"
>>> s.replace("%", "\\").decode("unicode_escape")
u'\ue8fc\x82'

答案 1 :(得分:2)

这是正确的。 \\代表单个反斜杠。这是字符串的unicode-escape d版本。

使用以下代码转换为标准字符串:

>>> import codecs
>>> codec.decode("\\ue8fc\\u0082", "unicode-escape")
'\ue8fc\x82'