2017-05-31 16 views
0

は考えてみて、私は次の形式のいくつかのバイナリデータを持っている文字列を持っている:文字列はバイナリデータを持っているかどう文字列にバイナリデータが含まれているかどうかを確認するには?

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

は今、私は、識別したいです。私は次のコードを試しています:

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

しかし、これは動作しません。文字列にバイナリデータが含まれているかどうかを効率的に特定する方法を教えてください。

+0

まずあなたがpřívěsyTlumičeプロautobusy' –

+0

návěsy事は、私はいくつかのキーのJSONファイルでは、このデータを取得し、ある 'あなたがやったように値を書き、ない理由を自問してみてください。時にはこれは上記のようなバイナリデータを含んでいます。私は意味のある文字列を持っているときに私がバイナリデータを持っているときを特定したい。 –

+0

Python 2または3をお使いですか?これは、文字列がデータ構造の印刷でどのように表現されているかという問題ですか?あなたは何を達成しようとしていますか? –

答えて

1

'\ xe [0-9]'は実際には特殊文字の単なる表現であるため、部分文字列 'xe'は検索できません。

代わりに、各文字の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) 
関連する問題