用 space 转换 \x00

Converting \x00 with a space

我正在通过以下方式读取 /proc//cmdline 文件:

pfile = '/proc/%s/cmdline' % pid
if os.path.isfile(pfile):
    fh = open(pfile, 'r')
    pname = repr(fh.read())
    fh.close()

print pname

输出:

'myexe\x00arg\x00arg2'

如果我删除 repr,单词之间就没有 space

'myexeargarg2'

所以我把它改成

' '.join(fh.read().split('\x00'))

然后,我得到:

'myexe arg arg2'

只是想知道是否有其他方法可以将 \x00 转换为 space?

这里有一个简短的例子,可以帮助您回答您的问题。

content = b'cmd\x00arg1\x00arg2\x00'
print(content.replace("\x00", " "))

它将替换出现的解释 here

如果您查找 ASCII table,您会看到 \x00 是 NULL 字符。当你打印一些东西时 str 被调用它试图创建一个 printable 版本的数据和 unprintable 字符没有得到打印。您可以通过查看 string.printable:

来查看哪些字符是 printable
import string
if '\x00' in string.printable:
    print "printable"
else:
    print "unprintable"

当您 run this 时,您将看到此输出 "unprintable"。

但是 repr 尝试生成可以重新创建原始数据的内容,因此 \x00 需要在那里可见,因为需要重新创建原始数据。

如果您想在拥有 \x00 的任何地方获得 space,您需要做的就是 replace 它带有 space 和 fh.replace('\x00', ' ') .