这个问题困扰了我一段时间。
我有一个 34.6 KB 的 jpeg 文件。我们称它为 Image A。使用 Ruby,当我将 Image A 的每一行复制到一个新创建的名为 Image B 的文件中时,它被完全复制。它与图像 A 的大小完全相同,并且可以访问。
这是我使用的代码:
image_a = File.open('image_a.jpg', 'r')
image_b = File.open('image_b.jpg', 'w+')
image_a.each_line do |l|
image_b.write(l)
end
image_a.close
image_b.close
此代码生成 image_a 到 image_b 的完美副本。
当我尝试将图像 A 逐字节复制到图像 B 中时,它复制成功,但文件大小为 88.9 KB,而不是 34.6 KB。我无法访问图像 B。我的 mac 系统提醒我它可能已损坏或正在使用无法识别的文件格式。
相关代码:
//same as before
image_a.each_byte do |b|
image_b.write(b)
end
//same as before
为什么图像 B 逐字节复制时比图像 A 大?为什么它也会以某种方式、形状或形式受损?为什么图像 A 与 B 大小相同,逐行复制且可访问?
我的猜测是问题是编码问题。如果是这样,如果编码格式转换为正确的代码点,为什么在逐字节复制时编码格式很重要?代码点是否相互混淆,因此解析器无法区分它们?
\s 和 \n 重要吗?好像是这样。我做了一些研究,发现图像 A 有 128 行代码,而图像 B 只有一行。
谢谢阅读!