为什么在 Notepad++ 文件之间复制文本会创建具有不同字节的文件?

为什么在 Notepad++ 文件之间复制文本会创建具有不同字节的文件?

hi.pdf我用 word创建了一个简单的 pdf [ ] hi,当我在 Notepad++ 中打开它时,它的编码是 ANSI,我认为这是 Notepad++ 的最佳猜测,当我另存为 hiSaveAs.pdf

但是,当我从 Notepad++ 复制内容hi.pdf,粘贴到新文件并hiANSI.pdf使用 ANSI 编码保存时,文件已损坏且无法打开:

Error, failed to load pdf document.
  • 当我在 Notepad++ 中重新打开时hiANSI.pdf,它将 UTF8 列为编码,并且当我将它与 进行比较时hi.pdf,我注意到它在hi.pdf包含NUL字符的位置有空格:
    • hi.pdf: 屏幕截图1
    • hiANSI.pdf 截图2

  • 如果我将编码从hiANSI.pdfUTF8 更改为 ANSI,文本则会变得hi.pdf更加不同:截图3


有人能解释一下这里发生了什么吗?

  • 为什么另存为工作,但将完全相同的文本复制到新的 Notepad++ 文件中会导致出现空格而不是字符NUL
  • 为什么Notepad++认为hiANSI.pdf是UTF8,但是却hi.pdf是ANSI?

不是回答这个问题。

MSB 未被剥离。看一下十六进制比较:

在此处输入图片描述

例如,为什么在 0D 和 25 (第一行,第 10 个字节)之间添加 0A?

更新:

我注意到 Notepad 在“帮助”方面做得比 Notepad++ 少得多。例如,当我使用 Notepad 而不是 Notepad++ 将 hi.pdf 保存为 hiANSI.pdf 时,Notepad 提供的唯一帮助是在 (回车0x0A) 后添加 (换行),并将(NUL)0x0D替换为(空格):0x000x20

在此处输入图片描述

如果我将 hi.pdf 保存为 hiANSI.bin,它所做的就更少了。它只是替换0x000x20

在此处输入图片描述

在上述两种情况下,它生成了有效的 PDF,但其中“hi”被“IJ”替换:

在此处输入图片描述

更新

如果我将 hiANSI.pdf 中的以下 0x20 字节替换为 0x00 以匹配 hi.pdf,它会显示“hi”而不是“IJ”,但字体不同:

左边是hi.pdf,右边是hiANSI.pdf

以下是我更改的两个字节(以黄色突出显示):

在此处输入图片描述

为什么改变这两个字节会产生这种效果?

答案1

Notepad++ 是一个文本-editor,而不是二进制编辑器,因此它在粘贴时“纠正”了文本。

在您的示例中,0D被视为回车符,在 Windows 中,回车符被视为行尾符的一部分,但仍缺少0A(换行符)。所以 Notepad++ 已经深思熟虑地更正了您的文本。

更多信息请参见维基百科:

对于免费十六进制编辑器,请参见 氢键

相关内容