什么是编码与反斜杠字符串的正确方法? [重复]

问题描述 投票:0回答:2

这个问题已经在这里有一个答案:

在给定的例子:“\工具\更多信息\ n名称”我将如何把它变成字节

我试着使用Unicode逃逸,但似乎并没有工作:(

data = "\info\more info\nName"
dataV2 = str.encode(data)
FinalData = dataV2.decode('unicode-escape').encode('utf_8')
print(FinalData)

这是我应该得到B“\工具\更多信息\ n名称”,但意想不到的事情发生,我得到我的终端DeprecationWarnings我假设其因为反斜杠导致无效的序列,但我需要他们为这个项目

python encode
2个回答
1
投票

字符前反斜杠表明有人企图逃避随后将它做成某种特殊字符的字符。你得到的DeprecationWarning因为Python是(最终)打算让逃脱无法识别的错误,而不是默默地把他们当作一个反斜杠后面的字符。

要解决,无论是双倍的反斜杠(不知道你是否打算换行;如果是这样,n之前双人双反斜线):

data = "\\info\\more info\\nName"

或者,如果你希望所有的反斜线是文字反斜杠(该\n不应该是一个新行),那么你可以通过r前缀使用原始字符串:

data = r"\info\more info\nName"

它禁用反斜线插值除了引号字符本身的一切。

请注意,如果你只是让data回声在交互式解释器,它会显示反斜线一倍(因为它隐含使用repr,这是你键入重现什么的str)。为了避免这种情况,printstr,看看它实际上是这样的:

>>> "\\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

0
投票

您可以逃脱与另一个反斜杠反斜杠。

data = "\\info\\more info\nName"

你也可以使用原始字符串,不需要逃逸部分。

data = r"\info\more info""\nName"

需要注意的是,如果最后一个字符是一个反斜杠原始字符串不工作。

© www.soinside.com 2019 - 2024. All rights reserved.