【发布时间】:2026-01-12 22:25:01
【问题描述】:
这个问题困扰了我一段时间。
我有一个 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 只有一行。
感谢阅读!
【问题讨论】:
标签: ruby image encoding unicode base64