用 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', ' ')
.
我正在通过以下方式读取 /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
:
import string
if '\x00' in string.printable:
print "printable"
else:
print "unprintable"
当您 run this 时,您将看到此输出 "unprintable"。
但是 repr
尝试生成可以重新创建原始数据的内容,因此 \x00
需要在那里可见,因为需要重新创建原始数据。
如果您想在拥有 \x00
的任何地方获得 space,您需要做的就是 replace
它带有 space 和 fh.replace('\x00', ' ')
.