Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在python 3.6.3中将十六进制转换为ASCII_Python_Unicode_Ascii_Python 3.6_Decoding - Fatal编程技术网

无法在python 3.6.3中将十六进制转换为ASCII

无法在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) 这是

我尝试了以下方法,但没有成功

方法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)
这是以字节为单位返回我,而不是以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”‌​927C077EAF1E3DAC4C8A‌​8E8028C3F7295EF8157C‌​ED597A36EF1C3BFA4514‌​77BFF32EEB1806C2CC04‌​42585197A2BCD2C43921‌​47AADB93066D0BA5AB6D‌​BFD3F6FCEB7073AE61A5‌​D4AA8ABCBCFF4EEBD1A1‌​655689BFD7EAB82D77BF‌​7224F75FBCD323C9B9FA‌​9C0B7D799180878A81D5‌​D07CF05BE39EEF989B2F‌​C3077997D2C2F1162E5B‌​47D99E4B415BC8CE5C75‌​5476931BD8ED14B5FCEC‌​1C8C654515946AB7860B‌​BBEE7DCCFDAA7AA410FF‌​65352B153B58728D5781‌​4C610F825286D830C308‌​429BDCF1167887B125EF‌​B2FA34B3DEACD329F576‌​74C071BEF6C9CEAC0C7F‌​ABB587A1D6F8B4D0B53'@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拆分为两个字符的元组