如何在 Windows 上使用文本编辑器复制 png 文件?当我使用文本编辑器打开文件并将内容复制并粘贴到新文件中时,新文件已损坏且无法打开。这个文件与原始文件有何不同?我该如何解决这个问题?
答案1
原因是样本。在图像文件(二进制文件,不是文本)中,每个字节有 0 到 255 个符号。而 0 到 32(十进制)的符号是不可打印的。文本编辑器只能从中解释空格、制表符和换行符。其余的通常会被忽略。因此,当您复制信息时,您只复制了其中的一部分,因此您无法创建与原始文件相同的新文件。即使从文本编辑器进行保存操作也可能会破坏图像结构。
答案2
问题在于,文本可以以几种完全不同的方式存储,而这些方式只能看在文本编辑器中也一样。从一种格式转换为另一种格式对实际文本无害,但会完全破坏非文本数据。(PNG 文件不是文本 - 它们不会被读取为一系列行。)
例如,文本文件可能使用双字节 CR+LF 行分隔符或单字节 LF(如果来自旧版 MacOS,则甚至使用 CR)。如果您在文本编辑器中打开非文本文件,它将尝试解释每个 CR+LF和每个单独的 LF 都作为行分隔符 – 您无法仅通过查看记事本窗口来判断哪一行使用了哪一行。将“文本”保存到新文件中最终会将所有 LF 替换为 CR+LF,因此现在许多二进制值都不同(10 变成了 13)并且位置发生了变化(因为插入了一个额外的字节)。
(PNG 格式甚至有专门用于检测此类损坏的功能。)
再举一个例子,相同的文本可能以 UTF-8 编码(带或不带 BOM 标记)或 UTF-16 编码(具有两个子类型 + 再次带/不带 BOM)或各种 ISO8859 编码存储。如果您将 PNG 文件作为 ISO8859-1 文本加载,然后将其保存为 UTF-8 文本,它在文本编辑器中看起来会相同,但保存的实际字节值将完全不同。
第三个例子是,二进制文件经常在各个地方包含 NUL (0x00) 字节,而在某些文本编辑器中,这些字节会完全消失。它们还经常包含“控制”范围内的字节(0x01 到 0x1F),一些其中有些通常在文本中找到(制表符、换行符),但有些在文本文件中根本不使用(例如 BEL),文本编辑器可能会决定丢弃它们。