粘贴后,尽管文本中包含正确的俄文字符,但全都是“?”。我不得不将包含所有“?”的扭曲文本的文件转换为 UTF-8 BOM,然后在浏览器中再次复制文本,然后再次粘贴到 Notepad++ 中以粘贴正确的字符。之后对文件进行任何更改后,都需要执行此过程。UTF-8 的问题更大,我可以像使用 UTF-8 BOM 一样粘贴正确的俄文字符,但是程序重启后字符总是会再次扭曲。我与这个问题斗争了几个月,却无法理解其中的逻辑,看起来如果创建新的空文件(在新文档的配置中设置 UTF-8 BOM),粘贴俄文,保存,重启程序,将使用硬编码的代码页而不是 UTF-8。之后每次我更改某些内容并只是保存,但没有执行“转换为 UTF-8 BOM”+保存,整个文本就会再次扭曲。
甚至在使用其他一些具有更奇特的拉丁代码页的语言时也会出现类似的问题(对于中欧 Windows-1250,如果文件的扩展名为 *.nfo fe,则在程序重新启动后字符“č”会丢失)。希伯来语根本不起作用,我通过转换为 HTML 字符实体解决了这个问题。Win7 SP3 x64 上的 Notepad 7.9.1 x64。
答案1
我最近发现哪些附加逻辑确实会改变程序的行为。关键是,对于一些众所周知的文件扩展名,程序中还硬编码了一些逻辑!我创建了带有 *.nfo 扩展名的 Windows 上的 UTF-8 文本文件,打算将其用作我的情况中某些文档的信息文件。但是,*.nfo 是众所周知的 torrent-readme 扩展名,类似于文本,里面有纯文本格式的图形,并且 UTF-8 支持似乎已明确关闭此类扩展名。如果从磁盘加载(程序重新启动后),则使用某些固定代码页重新打开文件,并动态自动转换为 UTF-8 BOM,但在这种情况下失败了(UTF-8-code-UTF-8 往返并不总是定义的)。我没有意识到,对于我的目的而言,info 扩展名在 Windows 中很常见。在我切换到 *.info 扩展名后,一切都按预期在 Windows 中运行正常。