python3.6 中的相同代码生成的文件比 python2.7 中的文件大。 Bin 到 ASCII 的转换
Same code in python3.6 produces larger file than python2.7. Bin to ASCII conversion
有人可以帮助我理解为什么在 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 是一个 1330 字节长的字符串。在 Python2.7 中,此代码生成一个 1330 字节的文件,其中包含相关的 ascii 数据。当 运行 和 python3.6 的大小膨胀到 1974 字节。为什么会有这种行为差异?
您生成的字符可能不是 7 位 ascii 定义的字符。由于python3.x符合unicode,7位ascii码之外的字符编码table使用多字节编码。
最著名的unicode字符编码技术是utf-8。它分布广泛。在此标准中,一个字符最多可以使用 4 个字节进行编码。
因此,当您的文件在 python 3.x
的使用下变大时,这并不奇怪
甚至很有可能,与 python 2.x
相比,python 3.x 除了文件大小不同之外还有其他内容
可以肯定的是,我在这里写的内容,最好是 post 您要转换的完整原始位串。所以我将不得不验证它。
顺便说一句。 python 2.x 自 2020 年初以来已放弃支持。See sunsetting...
有人可以帮助我理解为什么在 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 是一个 1330 字节长的字符串。在 Python2.7 中,此代码生成一个 1330 字节的文件,其中包含相关的 ascii 数据。当 运行 和 python3.6 的大小膨胀到 1974 字节。为什么会有这种行为差异?
您生成的字符可能不是 7 位 ascii 定义的字符。由于python3.x符合unicode,7位ascii码之外的字符编码table使用多字节编码。
最著名的unicode字符编码技术是utf-8。它分布广泛。在此标准中,一个字符最多可以使用 4 个字节进行编码。
因此,当您的文件在 python 3.x
的使用下变大时,这并不奇怪甚至很有可能,与 python 2.x
相比,python 3.x 除了文件大小不同之外还有其他内容可以肯定的是,我在这里写的内容,最好是 post 您要转换的完整原始位串。所以我将不得不验证它。
顺便说一句。 python 2.x 自 2020 年初以来已放弃支持。See sunsetting...