我创建了带有 UTF-8 编码内容的文件(使用 PHP fputcsv)。
当我在 Notepad++ 中打开此文件时 - 字符错误(Notepad++ 以 ANSI 编码开头)。
当我从菜单中设置 Format->"Encode in UTF-8" 时 - 一切都很好。
我担心,记事本++可以以某种方式识别编码,也许我的文件有问题fputcsv
?第一个字节还是什么?
我创建了带有 UTF-8 编码内容的文件(使用 PHP fputcsv)。
当我在 Notepad++ 中打开此文件时 - 字符错误(Notepad++ 以 ANSI 编码开头)。
当我从菜单中设置 Format->"Encode in UTF-8" 时 - 一切都很好。
我担心,记事本++可以以某种方式识别编码,也许我的文件有问题fputcsv
?第一个字节还是什么?
自动检测编码不是可以准确完成的事情。明确指定编码非常重要。在某些情况下可以猜到,但即便如此也不是 100% 确定的。
本文档 ( Encoding ) 解释了与 Notepad++ 相关的情况。他们还指出,特别是如果文件没有使用字节顺序标记 (BOM) 保存,就会出现困难。
鉴于您手动设置编码后文件显示正确,我会说您生成和保存文件的方式没有任何问题。您唯一可以检查的是是否正在保存 BOM,这可能会提高 Notepad++ 能够自动检测编码的机会。
值得注意的是,虽然它可以帮助 Notepad++ 等编辑器更准确地识别编码,但根据 The Unicode Standard 文档,不推荐使用 BOM。
您必须检查 Notepad++ GUI 的右下角才能看到正在使用的实际编码。问题不是 Notepad++ 特有的,因为猜测正确的编码是一个大问题,没有任何真正的解决方案,所以最好让用户决定在每种情况下最合适的编码是什么。
当你想在Java程序中体现文本文件的编码时,你必须考虑两个方面:编码和字符集。打开文本文件时,您会在“编码”菜单下看到编码。另外查看字符集菜单点。在“东欧”下,您将找到“ISO 8859-2”,在中欧“Windows-1250”下。查表时可以在Java程序中设置相应的编码: https : //docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html 例如对于Central European字符集“Windows-1250”表建议Java编码“Cp1250”。设置编码,您将正确看到程序中的字符。