【发布时间】:2010-12-22 16:50:06
【问题描述】:
我希望获取一个以 UTF-8 编码且不使用超过 128 个不同字符的文件,然后将其移至 7 位编码以节省 1/8 的空间。例如,如果我有一个 16 MB 的文本文件,它只使用前 128(ascii) 个字符,我想削减多余的位以将文件减小到 14MB。
我该怎么做呢?
似乎没有现有的免费或专有程序可以这样做,所以我想我可以尝试制作一个简单(如果效率低下)的程序。
我的基本想法是从每个字符当前使用的十六进制/十进制/二进制值到我在七位编码中拥有的 128 个值创建一个函数,然后扫描文件并将每个修改后的值写入一个新文件。
如果文件看起来像这样(我将使用十进制示例,因为我尽量不必用十六进制思考)
127 254 025 212 015 015 132... 会变成
001 002 003 004 005 005 006
如果 127 映射到 001,254 映射到 005,等等
不过,我对一些事情并不完全确定。
- 这是否足以真正缩短文件大小?我有一种不好的感觉,这只会在二进制字符串上留下一个额外的 0——11011001 可能会映射到 01000001 而不是 1000001,而且我实际上不会节省空间。 如果发生这种情况,我该如何摆脱零?
- 如何打开文件以二进制/十进制/十六进制读取/写入,而不仅仅是文本? 我主要使用 Python,但如果必须,我可以应付 C。
谢谢。
【问题讨论】:
-
我认为您的问题不是关于 UTF-8,而是关于一般压缩。我建议您关注压缩部分和/或阅读更多关于文本编码和 UTF 编码的信息。
-
您真正的问题与“编码”或“utf-8”无关。这都是关于数据压缩的。考虑到多年来已经尝试和测试了几种不同的压缩方法,更重要的是现在可以可靠地压缩和解压缩有价值的数据。与您的方法不同,它们对各种数据也很有用。如果要使用 Python 压缩文件,请使用 gzip 模块或 zipfile 模块。
标签: python c utf-8 compression