考虑,我有一个具有以下形式的一些二进制数据的字符串:如何检查一个字符串是否包含二进制数据?
n\xe1v\u011bsy a p\u0159\xedv\u011bsy Tlumi\u010de pro autobusy
现在我想确定,如果一个字符串二进制数据或没有。我正在尝试以下代码:
def isBinary(line):
print line
return "xe" in line
但这不起作用。如何有效识别字符串是否包含二进制数据。
考虑,我有一个具有以下形式的一些二进制数据的字符串:如何检查一个字符串是否包含二进制数据?
n\xe1v\u011bsy a p\u0159\xedv\u011bsy Tlumi\u010de pro autobusy
现在我想确定,如果一个字符串二进制数据或没有。我正在尝试以下代码:
def isBinary(line):
print line
return "xe" in line
但这不起作用。如何有效识别字符串是否包含二进制数据。
您不能查找子字符串'xe',因为'\ xe [0-9]'实际上只是一个特殊字符的表示。
而是可以检查每个字符的ASCII值是否在期望的范围内。例如如果我只想要字母字符:
for c in input_str:
ascii_val = ord(c)
upper = range(65, 91)
lower = range(97, 123)
if ord(c) not in upper and ord(c) not in lower:
print("NON-ALPHABETICAL CHARACTER FOUND!")
break
你可以使用"\xe1" in line
,这将寻求在该行的字节值0xE1。但是你真的必须定义“二进制数据”;什么是文本数据,什么是二进制文件?假设您的定义是“ASCII” - 也就是说,任何0x80或更高都将其标记为二进制。在这种情况下:
def is_binary(line): # PEP 8 naming - snake_words not mixedCase
return any(ord(x) > 0x80 for x in line)
您可能还想检查行中是否有“\ x00”,因为这通常表示二进制数据。
def is_binary(line):
return "\x00" in line or any(ord(x) > 0x80 for x in line)
首先问自己,为什么你写的值是你一个人,而不是'návěsy一个přívěsyTlumiče亲autobusy' –
的事情是,我在一些关键的一个JSON文件获取这些数据。有时这包含像上面这样的二进制数据。当我有有意义的字符串时,我想确定何时具有二进制数据。 –
你在Python 2或3吗?这只是数据结构打印中字符串表示的问题吗?你想达到什么目的? –