2017-05-31 22 views
0

考虑,我有一个具有以下形式的一些二进制数据的字符串:如何检查一个字符串是否包含二进制数据?

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

现在我想确定,如果一个字符串二进制数据或没有。我正在尝试以下代码:

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

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

+0

首先问自己,为什么你写的值是你一个人,而不是'návěsy一个přívěsyTlumiče亲autobusy' –

+0

的事情是,我在一些关键的一个JSON文件获取这些数据。有时这包含像上面这样的二进制数据。当我有有意义的字符串时,我想确定何时具有二进制数据。 –

+0

你在Python 2或3吗?这只是数据结构打印中字符串表示的问题吗?你想达到什么目的? –

回答

1

您不能查找子字符串'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 
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) 
相关问题