[英]Convert from string containing hexadecimal characters to bytes in python 3
[英]Convert a bytes object with hexadecimal characters to string?
我遇到的麻烦比我想承认的要多。 我已经检查了无数运气。 我正在尝试像这样转换一个字节对象:
b = b'%PDF-1.5\r%\xe2\xe3\xcf\xd3\r\n'
转换为字符串变量。
我已经尝试了以下方法,
import codecs
codecs.decode(b, 'hex')
# Error: decoding with 'hex' codec failed (Error: Non-hexadecimal digit found)
b.decode('hex')
# LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs
b.unhexlify(_)
#AttributeError: 'bytes' object has no attribute 'unhexlify'
str(b)
# just gives me the same bytes object with str type
b.decode('utf-8')
# UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 10: invalid continuation byte
谁能告诉我我在做什么错?
您所拥有的是PDF文件; 虽然部分基于ASCII文本,但PDF文件不是纯文本。 您甚至可以找到一种方法来解码标头中的魔术字节(iso8859-1应该这样做),但是一旦您遇到压缩压缩的流,您将拥有全熵256字节的序列,这些序列无法进行有意义的解码与任何编解码器。
IOW:无法将PDF文件的整个字节内容有意义地解码为Unicode字符串,因为它不是任何类型的Unicode代码点的直接表示。 这就像试图将JPEG文件解码为Unicode字符串一样:毫无意义,也是不可能的。
如果要从PDF文件中提取文本,则必须实际解析和解码其结构,这一点都不琐碎。
实际上b
已经是一个字符串。 您可以通过类型检查并验证它可以打印所有特殊字符来了解它:
>>> b = b'%PDF-1.5\r%\xe2\xe3\xcf\xd3\r\n'
>>> type(b)
<type 'str'>
>>> print(b)
%ÔѤË1.5
>>>
如果您有真实的字节对象,则可以使用.decode(encoding)
从字节转换为字符串。 不好的是,您需要知道您的编码才能执行此操作。
我通过以下网址的几种编码进行了反复试验: https : //docs.python.org/2.4/lib/standard-encodings.html 。 iso8859_15不会产生错误,但是我不能保证它是一个很好的错误。 这是一个片段:
line.decode('iso8859_15')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.