我是Python 3的新手,似乎无法完全掌握unicode和字符编码。当字节对象显然只包含字符时,将Python 3字节对象转换为字符串
我正在处理另一个工具的输出,它将html页面的内容作为字节对象返回。我们使用的其他工具需要此输出为字节类型,但是,我想将字节输出转换为字符串,以便解析和比较其他字符串。对于我感兴趣的情况,打印输出字节对象只显示字符并且不显示\ x或\ u二进制文件。我对如何最好地做到这一点以及为什么创建所需输出的方法实际上有效而感到困惑。
我已经在其他地方读过.decode()应该在这个上下文中使用,这确实有效,但我不明白为什么我解码已经是字符的对象。据我了解,解码是为二进制数,例如:
>>> b'\x41'.decode('utf-8')
'A'
在我的理解,我真正想要做的是告诉Python的是一个已经被标记为一个字节类型对象的对象实际上是一个STR目的。只需在bytes对象上使用str()函数即可实现此目标,但会添加“b”前缀并在字符串周围添加引号。
这里有两种解决方案我的工作:
>>> str(b'htmltext')
"b'htmltext'"
>>> b'htmltext'.decode('utf-8')
'htmltext'
从本质上讲,这两种方案似乎达到什么我正在寻找,但解码()似乎很明显更清洁,并从什么我读过,推荐的方法。我想知道为什么解码()的作品,鉴于此,显然,我不会将二进制数字转换为字符。此外,除了输出中没有吸引力的“b”和引号外,是否还有其他原因,str()在这里不是有效的解决方案?
一旦你理解*为什么* Python3将字符串和二进制数据分为两种不同的类型,这将更容易回答。请参阅http://eli.thegreenplace.net/2012/01/30/the-bytesstr-dichotomy-in-python-3 – turbulencetoo
* Everything *是二进制数据。 –
认为计算机中的每一件事物都有二进制表示是很自然的,但在Python中它不是那样的 - 太糟糕了!特别是,字符串是没有编码的unicode对象,编码是从unicode对象到字节对象的映射。这是查看字符串,字节对象及其关系的一种方式,但我看不到获得的结果。 –