不要在Python中转换特殊字符

时间:2017-05-05 18:36:34

标签: python python-2.7 special-characters

我只想打印原始字符串。

[案例1]我知道put" r"在字符串可以工作之前

<body><%= Encode.forHtml(UNTRUSTED) %></body>

[案例2]但是当它是变量

print r'123\r\n567"45'
>>`
123\r\n567"45

是否有任何功能可以打印aaa,效果与Case1相同?

3 个答案:

答案 0 :(得分:0)

如果您真正想要的只是打印原始字符串,而不是在文字前加r,则可能需要使用python本机函数repr。 E.g。

>>> aaa = '123\r\n567"45'
>>> print repr(aaa)
'123\r\n567"45'

在这个(确切)情况下等同于

>>> print repr('123\r\n567"45')
'123\r\n567"45'

答案 1 :(得分:0)

您可以使用python中的repr函数来执行此操作:

如果您使用的是python 2,那么:

enter image description here

如果您使用的是python 3,那么: enter image description here

答案 2 :(得分:0)

使案例2像案例1一样工作的显而易见的方法是在赋值语句中使用原始字符串:

aaa = r'123\r\n567"45'

现在,当您打印aaa时,您将获得实际的反斜杠以及rn个字符,而不是回车符和换行符。

如果您实际从其他来源(而不是使用字符串文字)加载aaa,那么您的任务会更复杂一些。您实际上需要以某种方式转换字符串以获得所需的输出。

使用repr函数关闭的一种简单方法是使用aaa = some_function() # returns '123\r\n567"45' and some_function can't be changed print repr(aaa) 函数:

print repr(aaa)[1:-1]

这不会做你想要的,因为它会在字符串的文本周围加上引号。如果您关心这一点,可以用切片删除它们:

str.replace

另一种方法是手动转换您想要转义的字符,例如使用str.translateprint aaa.replace('\r', r'\r').replace('\n', r'\n') 。如果您只关心逃避一些特殊角色而不是其他角色,这很容易做到。

str.encode

最后一个选项是将unicode-escape与名为print aaa.encode('unicode-escape') 的特殊字符集一起使用,它将转义所有不可打印的ASCII字符:

str.encode

但这仅适用于Python 2中的预期。在Python 3中,bytes始终会返回decode个实例,您需要再次str才能获得aaa.encode('unicode-escape').decode('ascii')ARectF,但是它真的很难看。