标签:python type-conversion byte
我有以下代码:
with open("heart.png", "rb") as f:
byte = f.read(1)
while byte:
byte = f.read(1)
strb = byte.decode("utf-8", "ignore")
print(strb)
从“heart.png”读取字节时,我必须读取十六进制字节,例如:
b'öx1a', b'öxff', b'öxa4', etc.
以及这种形式的字节:
b'A', b'D', b'O', b'D', b'E', etc. <- spells ADOBE
现在出于某种原因,当我使用上面的代码从字节转换为字符串时,它似乎不适用于十六进制形式的字节,但它适用于其他一切.
因此,当b’öx1a’出现时,它会将其转换为“”(空字符串)
当b’H’出现时,它将其转换为“H”
有谁知道为什么会这样?
解决方法:
这里发生了一些事情.
PNG file format可以包含以Latin-1或UTF-8编码的文本块. tEXt块以Latin-1编码,您需要使用’latin-1’编解码器对它们进行解码. iTXt块以UTF-8编码,需要使用’utf-8’编解码器进行解码.
但是,您似乎尝试解码单个字节,而UTF-8中的字符可能跨越多个字节.因此,假设您要读取UTF-8字符串,您应该在尝试解码之前读取要解码的字符串的整个长度.
如果您试图从文件中解释二进制数据,请查看专用于此目的的struct
模块.
标签:python,type-conversion,byte 来源: https://codeday.me/bug/20190624/1275730.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。