【问题标题】:Python UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8c in position 2: invalid start bytePython UnicodeDecodeError:“utf-8”编解码器无法解码位置 2 中的字节 0x8c:无效的起始字节
【发布时间】:2018-01-16 10:02:44
【问题描述】:
有人知道如何在 Python 3.6.0 版上解码我的十六进制值吗?
我使用的是 x.decode("hex") 但由于 python 更新它不再工作了。
这是我的十六进制值:
01008C647620302E31302E372070762039393130333120736E20333137337C6661336232653863206D7A20313778313720736B6620343235357C34376330643162302073706620333237397C363236373361376520627066203332363137307C61653138366364642073746620323538397C623634383035633220616D66203335333230357C633736333133626200
【问题讨论】:
标签:
python
syntax
hex
decode
【解决方案1】:
在 Python 3.6 中,不需要解码字符串(str 类型),因为它们已经是 utf-8。此外,普通的decode 函数只允许“标准”字符串解码。也就是说,这个函数不能解码十六进制。
相反,此“特殊”解码功能已移至codecs.decode。因此,您希望将代码重写为:
import codecs
x = "01008C647620302E31302E372070762039393130333120736E20333137337C6661336232653863206D7A20313778313720736B6620343235357C34376330643162302073706620333237397C363236373361376520627066203332363137307C61653138366364642073746620323538397C623634383035633220616D66203335333230357C633736333133626200"
codecs.decode(x, 'hex')