无法在python 3.6.3中将十六进制转换为ASCII
我尝试了以下方法,但没有成功 方法1: var包含十六进制值无法在python 3.6.3中将十六进制转换为ASCII,python,unicode,ascii,python-3.6,decoding,Python,Unicode,Ascii,Python 3.6,Decoding,我尝试了以下方法,但没有成功 方法1: var包含十六进制值 bytes.fromhex(var).decode('ascii') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xdb in position 0: ordinal not in range(128) 这是
bytes.fromhex(var).decode('ascii')
Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xdb in position 0: ordinal not in range(128)
这是以字节为单位返回我,而不是以ASCII为单位
是否有人可以帮助您进行此转换?您是否尝试过:
chr(var)
这将为您提供ASCII代码的字符。您是否尝试过:
chr(var)
>>> var = int('7A', 16) #var is an integer now
>>> chr(var) #int value to char
'z'
这将为您提供ASCII代码的字符
>>> var = int('7A', 16) #var is an integer now
>>> chr(var) #int value to char
'z'
此解决方案仅适用于一个字符。您必须拆分字符串并转换所有分开的十六进制值。看看如何分割它
此解决方案仅适用于一个字符。您必须拆分字符串并转换所有分开的十六进制值。看看如何分割它。你试过了吗
codecs.decode(codecs.decode(var,'hex'),'ascii')
你试过了吗
codecs.decode(codecs.decode(var,'hex'),'ascii')
从问题中可以看出,我假设使用Python 3x。
错误的原因是,您试图用ASCII码解码值大于127的字节
'0xdb'
。您不能这样做-ASCII编码中没有这样的字节值。
您的选项是:
1.忽略解码错误:
>>> u = 'DB91132598CC' # unicode
>>> b = codecs.decode(u,"hex") # bytes
>>> b
b'\xdb\x91\x13%\x98\xcc'
>>> result = b.decode("ascii", errors="ignore") # unicode
>>> result
'\x13%'
二,。使用不同的编码:
>>> result = b.decode("cp1252") # for example
>>> result
'Û‘\x13%˜Ì'
如果在结果中只需要ASCII字符,请使用选项#1 正如我假设使用Python 3x的问题所示。
错误的原因是,您试图用ASCII码解码值大于127的字节
'0xdb'
。您不能这样做-ASCII编码中没有这样的字节值。
您的选项是:
1.忽略解码错误:
>>> u = 'DB91132598CC' # unicode
>>> b = codecs.decode(u,"hex") # bytes
>>> b
b'\xdb\x91\x13%\x98\xcc'
>>> result = b.decode("ascii", errors="ignore") # unicode
>>> result
'\x13%'
二,。使用不同的编码:
>>> result = b.decode("cp1252") # for example
>>> result
'Û‘\x13%˜Ì'
如果在结果中只需要ASCII字符,请使用选项#1 以下代码:
codecs.decode(var,"hex")
在Python 2.7中,结果为str
:
'\xdb\x91\x13%\x98\xcc\xbfv\xaef\x8bK\x08Qv\xbb\x19\'u"\x1f\xdb\xb5\x0f\xce\x1c9\'\xc0w\xea\xf1\xe3\xda\xc4\xc8\xa8\xe8\x02\x8c?r\x95\xef\x81W\xce\xd5\x97\xa3n\xf1\xc3\xbf\xa4QG{\xff2\xee\xb1\x80l,\xc0D%\x85\x19z+\xcd,C\x92\x14z\xad\xb90f\xd0\xbaZ\xb6\xdb\xfd?o\xce\xb7\x07:\xe6\x1a]J\xa8\xab\xcb\xcf\xf4\xee\xbd\x1a\x16Uh\x9b\xfd~\xab\x82\xd7{\xf7"Ou\xfb\xcd2<\x9b\x9f\xa9\xc0\xb7\xd7\x99\x18\x08x\xa8\x1d]\x07\xcf\x05\xbe9\xee\xf9\x89\xb2\xfc0w\x99},/\x11b\xe5\xb4}\x99\xe4\xb4\x15\xbc\x8c\xe5\xc7UGi1\xbd\x8e\xd1K_\xce\xc1\xc8\xc6TQYF\xabx`\xbb\xbe\xe7\xdc\xcf\xda\xa7\xaaA\x0f\xf6SR\xb1S\xb5\x87(\xd5x\x14\xc6\x10\xf8%(m\x83\x0c0\x84)\xbd\xcf\x11g\x88{\x12^\xfb/\xa3K=\xea\xcd2\x9fWgL\x07\x1b\xefl\x9c\xea\xc0\xc7\xfa\xbbXz\x1do\x8bM\x0bS'
原因是在Python2.7中
str == bytes #True
而在Python3.6中
str == bytes #False
Python 2字符串是字节字符串,而Python 3字符串是unicode字符串。这两个结果实际上是相同的,但Python3中的字节字符串的类型是bytes
而不是str
,文本表示的前缀是b
这与ASCII编码无关,因为输出变量(无论Python版本如何)都不是ASCII编码的。
此外,在Python 2.7上,还将出现以下错误:
codecs.decode(var, 'hex').decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xdb in position 0: ordinal not in range(128)
codecs.decode(变量'hex').decode('ascii'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeDecodeError:“ascii”编解码器无法解码位置0:序号不在范围(128)中的字节0xdb
实际上,我是从Python 2.7解释器粘贴的,但您可以自己检查。在任何版本的Python中,都不能使用
ascii
编解码器对输出字符串进行解码,因为它在任何情况下都不是ascii
编码字符串。以下代码:
codecs.decode(var,"hex")
在Python 2.7中,结果为str
:
'\xdb\x91\x13%\x98\xcc\xbfv\xaef\x8bK\x08Qv\xbb\x19\'u"\x1f\xdb\xb5\x0f\xce\x1c9\'\xc0w\xea\xf1\xe3\xda\xc4\xc8\xa8\xe8\x02\x8c?r\x95\xef\x81W\xce\xd5\x97\xa3n\xf1\xc3\xbf\xa4QG{\xff2\xee\xb1\x80l,\xc0D%\x85\x19z+\xcd,C\x92\x14z\xad\xb90f\xd0\xbaZ\xb6\xdb\xfd?o\xce\xb7\x07:\xe6\x1a]J\xa8\xab\xcb\xcf\xf4\xee\xbd\x1a\x16Uh\x9b\xfd~\xab\x82\xd7{\xf7"Ou\xfb\xcd2<\x9b\x9f\xa9\xc0\xb7\xd7\x99\x18\x08x\xa8\x1d]\x07\xcf\x05\xbe9\xee\xf9\x89\xb2\xfc0w\x99},/\x11b\xe5\xb4}\x99\xe4\xb4\x15\xbc\x8c\xe5\xc7UGi1\xbd\x8e\xd1K_\xce\xc1\xc8\xc6TQYF\xabx`\xbb\xbe\xe7\xdc\xcf\xda\xa7\xaaA\x0f\xf6SR\xb1S\xb5\x87(\xd5x\x14\xc6\x10\xf8%(m\x83\x0c0\x84)\xbd\xcf\x11g\x88{\x12^\xfb/\xa3K=\xea\xcd2\x9fWgL\x07\x1b\xefl\x9c\xea\xc0\xc7\xfa\xbbXz\x1do\x8bM\x0bS'
原因是在Python2.7中
str == bytes #True
而在Python3.6中
str == bytes #False
Python 2字符串是字节字符串,而Python 3字符串是unicode字符串。这两个结果实际上是相同的,但Python3中的字节字符串的类型是bytes
而不是str
,文本表示的前缀是b
这与ASCII编码无关,因为输出变量(无论Python版本如何)都不是ASCII编码的。
此外,在Python 2.7上,还将出现以下错误:
codecs.decode(var, 'hex').decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xdb in position 0: ordinal not in range(128)
codecs.decode(变量'hex').decode('ascii'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeDecodeError:“ascii”编解码器无法解码位置0:序号不在范围(128)中的字节0xdb
实际上,我是从Python 2.7解释器粘贴的,但您可以自己检查。在任何版本的Python中,都不能使用
ascii
编解码器对输出字符串进行解码,因为它在任何情况下都不是ascii
编码字符串。由于var包含十六进制值,这将有何帮助?这是我的咒语8)8 8 8 8 8 8 8 8 8 8 8 8 CCBF766 6 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 88ED14B5FCEC1C8C654515946AB7860BBBEE7DCCFDAA7AA410FF65352B153B5872D57814C6100F825286D830C308429BDCF1167887B125EFB2FA34B3DEACD329F57674C071BEF6C9CEAC0C7FABB587A1D6F8B4D0B53'在这种情况下,var是带有十六进制编码值的字符串吗?您可以尝试使用int(var,16)获取整数值,但需要将var拆分为两个字符的元组。这就是var包含的“db91132598ccbf76ae668b4b0855176bb192775221fdbb50fce1c3”927C077EAF1E3DAC4C8A8E8028C3F7295EF8157CED597A36EF1C3BFA451477BFF32EEB1806C2CC0442585197A2BCD2C4392147AADB93066D0BA5AB6DBFD3F6FCEB7073AE61A5D4AA8ABCBCFF4EEBD1A1655689BFD7EAB82D77BF7224F75FBCD323C9B9FA9C0B7D799180878A81D5D07CF05BE39EEF989B2FC3077997D2C2F1162E5B47D99E4B415BC8CE5C755476931BD8ED14B5FCEC1C8C654515946AB7860BBBEE7DCCFDAA7AA410FF65352B153B58728D57814C610F825286D830C308429BDCF1167887B125EFB2FA34B3DEACD329F57674C071BEF6C9CEAC0C7FABB587A1D6F8B4D0B53'@CoolNetworking将此和所需的输出添加到您的问题中,因为var包含十六进制值,这会有什么帮助?这是我的咒语8)8 8 8 8 8 8 8 8 8 8 8 8 CCBF766 6 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 88ED14B5FCEC1C8C654515946AB7860BBBEE7DCCFDAA7AA410FF65352B153B5872D57814C6100F825286D830C308429BDCF1167887B125EFB2FA34B3DEACD329F57674C071BEF6C9CEAC0C7FABB587A1D6F8B4D0B53'在这种情况下,var是带有十六进制编码值的字符串吗?您可以尝试使用int(var,16)获取整数值,但需要将var拆分为两个字符的元组