2017-07-20 59 views
0

通過調試無法弄清楚,爲什麼我的隱藏字符串前面有bpython中的錯誤解碼結果

我在結果得到這個字符串: '1101000011001010110110001101100011'

def retr(filename): 
    img = Image.open(filename) 
    binary = '' 

    if img.mode in ('RGBA'): 
     img = img.convert('RGBA') 
     datas = img.getdata() 

     for item in datas: 
      digit = decode(rgb2hex(item[0], item[1], item[2])) 
      if digit == None: 
       pass 
      else: 
       binary = binary + digit 
       if (binary[-16:] == '1111111111111110'): 
        # print("Success") 
        return bin2str(binary[:-16]) 

     return str(bin2str(binary)) 
    return "Incorrect Image Mode, Couldn't Retrieve" 

,反而會導致控制檯是:b'hello'b從哪裏來?

做一些預溫控功能之前retr()

def rgb2hex(r, g, b): 
    return '#{:02x}{:02x}{:02x}'.format(r, g, b) 


def hex2rgb(hexcode): 
    return int(hexcode[1:3], 16), int(hexcode[3:5], 16), int(hexcode[5:7], 16) 


def str2bin(message): 
    binary = bin(int(binascii.hexlify(message.encode("ascii")), 16)) 
    return binary[2:] 


def bin2str(binary): 
    message = binascii.unhexlify('%x' % (int('0b' + binary, 2))) 
    return message 

幫助,請趕上那b ..

+3

一個'B'前綴表示你有一個字節串,看到的是https:// docs.python.org/3/library/stdtypes.html#bytes – cssko

+0

@cssko,我不能刪除它? – x24

+0

你爲什麼要「刪除」它? –

回答

1

bin2str返回一個字節的文字。您可以使用.decode()來返回一個字符串。

def bin2str(binary): 
    message = binascii.unhexlify('%x' % (int('0b' + binary, 2))) 
    return message.decode("utf-8") # or encoding of choice 
+1

是的,它幫助了我,非常感謝你!現在我明白了,我該如何使用它。再次感謝您。 – x24

1

我相信任何字節的字符串將包括:「B'」的字符串之前,以指示它來自一個二進制值。在您的二進制值轉換爲字符串,你可以做一個替換功能:

newstring = message.replace("b", "") 
newstring = message.replace("'", "") 
2
x = b'hello' 
print(x) 
    b'hello' 
print(x.decode('utf-8')) 
    'hello' 

我希望這說明足以讓您瞭解如何讓它回到一個UTF-8字符串

+1

是的,謝謝你的例子。我知道了。 – x24