我正在为大学做压缩技术的研究。其中一个实验是将某些威尔士语字母(双字母)替换为单个字符。
我认为用单个字符替换两个字符会减小文件大小(即使是微不足道的),或者最坏的情况下保持文件大小不变。我已经编写了一个Python脚本来完成此操作,但实际上它却增加了文件大小。我测试的原始文件大小约为74,400KB,输出程序大小约为74,700KB。
这是我的Python代码:
replacements = {
'ch':'ƒ',
'Ch':'†',
'CH':'‡',
'dd':'Œ',
'Dd':'•',
'DD':'œ',
'ff':'¤',
'Ff':'¦',
'FF':'§',
'ng':'±',
'Ng':'µ',
'NG':'¶',
'll':'º',
'Ll':'¿',
'LL':'Æ',
'ph':'Ç',
'Ph':'Ð',
'PH':'×',
'rh':'Ø',
'Rh':'Þ',
'RH':'ß',
'th':'æ',
'Th':'ç',
'TH':'ð',
}
print("Input file location: ")
inLoc = input("> ")
print("Output file location: ")
outLoc = input("> ")
with open(inLoc, "r",encoding="Latin-1") as infile, open(outLoc, "w", encoding="utf-8") as outfile:
for line in infile:
for src, target in replacements.items():
line = line.replace(src, target)
outfile.write(line)
当我在一个只有几行的非常小的文本文件上进行测试时,我查看了输出结果,与预期相符。
Input.txt:
Lle wyt ti heddiw?
Ddoe es i at gogledd Nghymru.
Output.txt:
¿e wyt ti heŒiw?
•oe es i at gogleŒ µhymru.
有人能解释一下正在发生什么吗?
'ƒ'
),所以无法将其作为Latin-1编写回去。因此,如果原始文本中有其他的Latin-1字符,如é
,这些字符也会被扩展;它们在Latin-1中是一个字节,在UTF-8中是两个字节。原帖中将ASCII双字母组(在Latin-1或UTF-8中为两个字节)转换为使用UTF-8编码的单个低序数Unicode字符实际上并不会产生任何费用,因为UTF-8编码很可能也是两个字节(所有小于0x7ff
的序数在UTF-8中都是两个字节)。但你的其他非ASCII Latin-1字符会膨胀。 - ShadowRangerlatin8
(一种带有凯尔特语字符的变体编码)以每个字符一个字节进行编码,但问题是,本地编码的东西将默认在系统语言环境中打开,而没有人使用cy_GB
。 - ShadowRangergzip
)压缩文本,如果空间是一个大问题。在边缘处挠来挠去,削减一两个字节,并不能算作压缩。 - ShadowRanger