字符串后跟数字的Python\0的行为不一致
我可以在字符串中输入“最多3个字符”的八进制值 有没有办法只输入一个字符的八进制值 比如说 如果我想打印\0后跟“Hello”,我可以执行以下操作:字符串后跟数字的Python\0的行为不一致,python,Python,我可以在字符串中输入“最多3个字符”的八进制值 有没有办法只输入一个字符的八进制值 比如说 如果我想打印\0后跟“Hello”,我可以执行以下操作: "\0Hello" 但如果要打印\0后跟“12345”,则无法执行此操作 "\012345" 相反,我必须这样做 "\00012345" 在非常模糊的场景中,这可能导致不一致的行为 def parseAsString(characters): output = ['H','I''!','\\','0'] + characters
"\0Hello"
但如果要打印\0后跟“12345”,则无法执行此操作
"\012345"
相反,我必须这样做
"\00012345"
在非常模糊的场景中,这可能导致不一致的行为
def parseAsString(characters):
output = ['H','I''!','\\','0'] + characters
print("".join(output).encode().decode('unicode_escape'));
parseAsString(['Y','O','U'])
#Output:
#>HI! YOU
parseAsString(['1','2','3'])
#Output:
#>HI!
#>3
答案是,当您处理\0时,请选择其中一个
"\0" + "Hello"
及
这两个字符串的工作方式与预期一致,因为“\0”在与字符串的其余部分连接之前已转换为“\x00”
或者,在更模糊的场景中:
def safeParseAsString(characters):
output = "".join(['H','I''!','\\','0']).encode().decode('unicode_escape')
output +="".join(characters).encode().decode('unicode_escape')
print(output)
safeParseAsString(['Y','O','U'])
#Output:
#>HI! YOU
safeParseAsString(['1','2','3'])
#Output:
#>HI! 123
为了扩展它,反斜杠引入了一个转义序列-
\n
是一个换行,\0
是一个nul,\000
是八进制,\x00
是十六进制。。。这意味着\012
是12
八进制(10
十进制或0xA
),其中as\0He
不是有效的八进制值,因此转义序列被解释为\0
后跟文字字符He
。
def safeParseAsString(characters):
output = "".join(['H','I''!','\\','0']).encode().decode('unicode_escape')
output +="".join(characters).encode().decode('unicode_escape')
print(output)
safeParseAsString(['Y','O','U'])
#Output:
#>HI! YOU
safeParseAsString(['1','2','3'])
#Output:
#>HI! 123