爲什麼「?」字符出現在以下十六進制值中? (我正在使用Python 3.5.1)「?」十六進制字符串轉換中的字符
我的目標是將string
轉換爲十六進制值對。
string = b'3f8ccccd'
hexpairs = binascii.unhexlify(string)
爲hexpairs
我得到的價值是這樣的:
b'?\x8c\xcc\xcd'
什麼?
字符的意義是什麼?我本來期望的輸出是:
b'\x3f\x8c\xcc\xcd'
爲什麼「?」字符出現在以下十六進制值中? (我正在使用Python 3.5.1)「?」十六進制字符串轉換中的字符
我的目標是將string
轉換爲十六進制值對。
string = b'3f8ccccd'
hexpairs = binascii.unhexlify(string)
爲hexpairs
我得到的價值是這樣的:
b'?\x8c\xcc\xcd'
什麼?
字符的意義是什麼?我本來期望的輸出是:
b'\x3f\x8c\xcc\xcd'
The?由於unhexlify已將3F用作字節碼(這是「?」的ASCII碼),因此發生。因此,Python將這些字節顯示爲ASCII碼。
@Benedict回答的是正確的,下面是一些資源來幫助您瞭解:
最初基於英語字母表,如由ASCII圖表上方 ASCII編碼128個指定 字符爲七個位整數。[8]編碼的字符是數字0到9,小寫字母 a到z,大寫字母A到Z,基本標點符號,控制 源自電傳打字機的代碼和空格。例如,對於 示例,小寫字母j將變成二進制1101010和十進制106. ASCII包括128個字符的定義:33個非打印 控制字符(許多已過時)[9]影響文本和 空間的處理方式[10]和95個可打印的字符,包括 空間
對於?
字符:
chr(0b00111111)
將輸出?
chr(0o77)
將輸出?
chr(63)
將輸出?
chr(0x3f)
將輸出?
正如你所看到的,你可以使用前綴像0b
,0o
,或0x
int
之前使Python明白你不是用十進制數工作。
但是0x8C
不在ascii表中(因爲它從0到127)。 0x8C
是十進制數140,它不能顯示等值。
這個問題可以通過下面給出的方式來解決。
hexastring = r'\xc3\xb9asdfsadf\xc3\xa9 asdfsdfsdf \xc3\x80 sdfsdfsdfdsf \xc3\xba'
hexaValueList = re.findall(r'((?:\\x[a-f\d]{2})+)',hexastring)
for hexaValue in hexaValueList:
beforeReplace = hexaValue
xReplace = re.sub(r'\\x','',hexaValue)
hex2String = bytearray.fromhex(xReplace).decode()
hexastring = re.sub(re.escape(beforeReplace),hex2String,hexastring)
print (hexastring)
回答
ùasdfsadféasdfsdfsdfÀsdfsdfsdfdsfú
其值對應於字符的ASCII被顯示爲這些字符的字節數。而0x3F是「?」的ASCII碼 –
就是這樣!謝謝。 – Hefaestion
@Hefaestion如果你想輸出寫爲你期望的字符串:'「」.join(「\\ x {}」。format(char.decode())for char in(string [i:i + 2] for我在範圍內(0,len(string),2)))。encode()' – Paradoxis