它是Base 64編碼,那麼它不是UTF-16編碼,也不是UTF-8。看看RFC 3548。 Base 64可以在文檔的第4頁找到。
實際上,其目的不同。 UTF-x編碼在這裏將unicode字符串編碼爲二進制流。也就是說,抽象字符串是解碼後的形式。另一方面,Base X等編碼在這裏編碼原始二進制到一個選定的ASCII值(基本上是小整數)的流,使二進制內容可以通過電子郵件傳輸,只接受字符。二進制文件是解碼後的原始格式。
在你的情況,它看起來隨着如果整數(32位)的系列被轉移:20,3,6,9,和12
以後更新回答下面的評論:我是如何得到的值...
b'\x14\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\t\x00\x00\x00\x0c\x00\x00\x00'
字面的b
前綴說,這是字面與bytes
類型值。 bytes
是一個小整數流 - 每一個字節,從0到255。當顯示爲文字時,如果相關的ASCII字符不容易顯示,則使用小整數的十六進制表示法 - 以\x
後跟兩個十六進制數字。該\t
是具有順序值9
然而製表符的表示,你也可以將其轉換爲整數的列表:
>>> list(b)
[20, 0, 0, 0, 3, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, 0, 12, 0, 0, 0]
現在是更加明顯。如果值足夠小以適合單個字節,則零是填充符。字節的順序是由操作系統/機器的字節序造成的。所以,實際上,應該是六(五32位整數):
00000014 00000003 00000006 00000009 0000000c
那就是:
20 3 6 9 12
換句話說,該b'\x14\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\t\x00\x00\x00\x0c\x00\x00\x00'
其實並不是一個字符串。這是一個bytes
文字,它捕獲5 * 4字節的值。 bytes
是一個小整數序列,不是字符。當您嘗試時更明顯:
>>> for value in b:
... print(value)
...
20
0
0
0
3
0
0
0
6
0
0
0
9
0
0
0
12
0
0
0
>>> type(b)
<class 'bytes'>
>>> type(b[0])
<class 'int'>
>>>
感謝您的回答。你能告訴我你是如何得到該字符串的整數值的?我試圖從基於64編碼的字符串中找出一些意義。 – aaragon 2014-09-02 20:31:44
應該將20與編碼字符串中的整數數量相關聯嗎? – aaragon 2014-09-02 21:48:45
這不是一個字符串。它是'字節'值。無論如何,'20'肯定不是* Python相關的。原始字符串只是一個字符串,「base64.b64decode」的結果是一個字節序列。我的解釋是,這些值可能是五個32位整數,只是猜測。這是你的問題相關。我不知道如何解釋價值。 – pepr 2014-09-03 13:49:53