![为什么记事本会“随机”缩小粘贴的文本的字体大小?](https://linux22.com/image/1323961/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%AE%B0%E4%BA%8B%E6%9C%AC%E4%BC%9A%E2%80%9C%E9%9A%8F%E6%9C%BA%E2%80%9D%E7%BC%A9%E5%B0%8F%E7%B2%98%E8%B4%B4%E7%9A%84%E6%96%87%E6%9C%AC%E7%9A%84%E5%AD%97%E4%BD%93%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
有时当我将文本复制并粘贴到记事本中时,它会以默认的记事本字体和大小粘贴文本,但是粘贴行的后半部分会小几倍字体大小。我不知道为什么会发生这种情况。
我想知道这是否是某种隐藏的格式被复制到记事本中,但我相信记事本会删除格式。我随后取出相同的文本,并尝试将其复制并粘贴到 URL 栏和 CMD 提示中以删除任何潜在的格式(即使它是从网络复制的纯文本),然后重新粘贴到记事本中,但仍然会出现这种现象。
此外,当调整记事本窗口的大小时,它将改变行的默认大小和缩小部分,如下面的屏幕截图所示。
这三个窗口实际上是同一个记事本窗口,每个窗口都有不同的调整大小和由此产生的文本大小。
答案1
我在使用记事本时也遇到过同样的问题。加载文件并以二进制形式分析其内容后,发现了原因:以小字体字母开头的行包含“EF BB BF”字节顺序标记(请参阅https://en.wikipedia.org/wiki/Byte_order_mark)。
怎么办:保存文件时,这个标记不知何故仍然保留。进行一些编辑会导致记事本识别 Unicode 并告诉您,如果保存文本,它将丢失。您也可以回到最开始,然后按“Delete”键删除不可见的“字符”。(字体会立即变大。)
发生这种情况的原因(就我而言):我创建了带有 Unicode 标记的文本文件,后来对文本行进行了排序并再次保存。字节顺序标记成为放在文件末尾的一行文本的一部分(不可见的标记搞乱了排序顺序),而在文本中间,这个标记就导致了这种效果。
答案2
为了真正解释 Uwe 提到的问题:您在这里看到的是 Windows 进行的字体替换。如果要显示的文本不包含您选择的字体中的字符,则 Windows 将尝试在存在该字符的地方查找字符。这对于在拉丁文本中运行中文或阿拉伯文等文本最有帮助,因为 Windows 为某些脚本提供了特殊字体,而且无论如何没有字体可以包含所有脚本¹。
Uwe 提到了字节顺序标记,尽管它不必出现在 UTF-8 中。例如,在 UTF-16 文本文件中,它看起来有所不同。通常,U+FEFF 不应出现在文本流的中间,而应只出现在开头,但它只是一个零宽度空格,因此即使偶尔发生也不会造成任何损害。但记事本在这里只是遇到了所选字体没有的字符²。因此会找到另一个包含该字符的字符,并且由于它周围的字符非常适合当时选择的字体,因此它具有一定的传染性。
这个情况很有趣,因为字符甚至不可见,但你经常会遇到类似的现象,即只有一个字符在另一种字体中呈现:
当然,在这些情况下,很容易看出原因。
1 首先是字体格式限制,然后是拉丁字体样式(例如衬线字体、无衬线字体、手写字体等)如何映射到相应脚本的常见问题——对于大多数字体,通常尝试一下也是徒劳的。因此,大多数字体至少包含拉丁文、希腊文和西里尔文,因为它们的风格相当相似,但除此之外的字体很少这样做。
2 如上所述,由于字符通常只出现在文本流的开头,然后被剥离(因为它不被视为内容的一部分),字体实际上不必具有字形。