同样的代码在python3.6中产生的文件比python2.7大。Bin到ASCII的转换

问题描述 投票:0回答:1

谁能帮我理解为什么在Python2下运行时,这段代码创建的文件比在Python3下运行时小得多(和预期的文件大小)?

binary_str="00110111011010110101......"

num_bytes = int(len(binary_str)/8)

with open('output', 'w') as f:
    output_str = ""
    for i in range(num_bytes):
        output_str += chr(int(binary_str[i:i+8],2))
    f.write(output_str)
    f.close()

binary_str是一个1330byte长的字符串。在Python2.7中,这段代码会产生一个1330字节的文件,其中包含相关的ascii数据。当用 python3.6 运行时,文件的大小会膨胀到 1974bytes。为什么会有这样的行为差异?

python python-3.x file text ascii
1个回答
2
投票

你可能产生了比7位ascii中定义的其他字符。由于python 3.x符合unicode,所以7位ascii码表之外的字符编码都是使用多个字节编码的。

最著名的 unicode 字符编码技术是 utf-8. 它的适用范围很广。在这个标准中,一个字符最多可以使用4个字节进行编码。

所以当你的文件在使用python 3.x的情况下变大并不奇怪。

甚至很有可能,在使用python 3.x和python 2.x时,除了文件大小不同外,你还会得到其他内容。

要真正确定我在这里写的内容,最好是你把你要转换的完整的原始位串贴出来。这样我就可以验证它。

顺便说一下,python 2.x的支持从今年年初2020年开始被放弃。见日落...

© www.soinside.com 2019 - 2024. All rights reserved.