Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串后跟数字的Python\0的行为不一致_Python - Fatal编程技术网

字符串后跟数字的Python\0的行为不一致

字符串后跟数字的Python\0的行为不一致,python,Python,我可以在字符串中输入“最多3个字符”的八进制值 有没有办法只输入一个字符的八进制值 比如说 如果我想打印\0后跟“Hello”,我可以执行以下操作: "\0Hello" 但如果要打印\0后跟“12345”,则无法执行此操作 "\012345" 相反,我必须这样做 "\00012345" 在非常模糊的场景中,这可能导致不一致的行为 def parseAsString(characters): output = ['H','I''!','\\','0'] + characters

我可以在字符串中输入“最多3个字符”的八进制值

有没有办法只输入一个字符的八进制值

比如说

如果我想打印\0后跟“Hello”,我可以执行以下操作:

"\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时,请选择其中一个

  • 请始终记住显式使用\000或\x00,如果原始文本来自其他来源,则可能无法这样做

  • 在处理原始字符串并连接它们时,始终先解码每个组成部分,然后最后连接它们,而不是相反

  • 例如,如果将字符串连接在一起,解析器将为您执行此操作:

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