Python 用反斜杠编码字符串的正确方法是什么?
在给定的示例中:“\info\more info\n名称” 如何将其转换为字节 我尝试使用unicode escape,但似乎不起作用:( 这是我应该得到的b'\info\more info\nName' 但是发生了意想不到的事情,我的终端收到了弃用警告Python 用反斜杠编码字符串的正确方法是什么?,python,encode,Python,Encode,在给定的示例中:“\info\more info\n名称” 如何将其转换为字节 我尝试使用unicode escape,但似乎不起作用:( 这是我应该得到的b'\info\more info\nName' 但是发生了意想不到的事情,我的终端收到了弃用警告 我假设这是因为反斜杠导致了一个无效的序列,但我需要在这个项目中使用它们字符之前的反斜杠表示试图转义后面的字符,使其成为某种特殊字符。您会得到弃用警告,因为Python(最终)将使无法识别的转义会发生错误,而不是将其默默地视为后跟字符的文字反斜杠
我假设这是因为反斜杠导致了一个无效的序列,但我需要在这个项目中使用它们字符之前的反斜杠表示试图转义后面的字符,使其成为某种特殊字符。您会得到
弃用警告
,因为Python(最终)将使无法识别的转义会发生错误,而不是将其默默地视为后跟字符的文字反斜杠
要修复此问题,请将反斜杠加倍(不确定是否要换行;如果是,请在n
之前将反斜杠加倍):
或者,如果希望所有反斜杠都是文字反斜杠(\n
不应该是换行符),则可以通过在r
前面加前缀来使用原始字符串:
data = r"\info\more info\nName"
这将禁用除引号字符本身之外的所有内容的反斜杠插值
请注意,如果您只是让数据
在交互式解释器中回显,它会将反斜杠显示为两倍(因为它隐式使用了str
的repr
,这是您要键入的内容来复制它)。为了避免这种情况,打印str
以查看它的实际外观:
>>> "\\info\\more info\\nName" # repr produced by simply evaluating it, which shows backslashes doubled, but there's really only one each time
"\\info\\more info\\nName"
>>> print("\\info\\more info\\nName") # print shows the "real" contents
\info\more info\nName
>>> print("\\info\\more info\nName") # With new line left in place
\info\more info
Name
>>> print(r"\info\more info\nName") # Same as first option, but raw string means no doubling backslashes
\info\more info\nName
可以用另一个反斜杠来逃避反斜杠
data = "\\info\\more info\nName"
对于不需要转义的部分,也可以使用原始字符串
data = r"\info\more info""\nName"
请注意,如果最后一个字符是反斜杠,则原始字符串不起作用。简单的答案是使用原始字符串文字。我确信堆栈溢出上已经有一个很好的副本,我只是想找到一个。
data = "\\info\\more info\nName"
data = r"\info\more info""\nName"