如何检查字符串是否包含二进制数据?

时间:2017-05-31 23:25:37

标签: python

考虑一下,我有一个字符串,其中包含以下形式的二进制数据:

n\xe1v\u011bsy a p\u0159\xedv\u011bsy Tlumi\u010de pro autobusy

现在我想确定一个字符串是否有二进制数据。我正在尝试以下代码:

def isBinary(line):
    print line
    return "xe" in line

但这不起作用。如何有效地识别字符串是否包含二进制数据。

2 个答案:

答案 0 :(得分:2)

你不能找到子串'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

答案 1 :(得分:0)

您可以使用"\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)