2013-01-09 35 views
9

我使用UTF-8编码的内容创建了文件(使用PHP fputcsv)。记事本+ +可以识别编码?

当我用记事本打开++中的文件 - 字符是错误的(记事本++开始使用ANSI编码)。

当我从菜单中设置格式 - >“UTF-8编码” - 一切都很好。

进出口令人担忧的,是记事本++能以某种方式识别编码,也许什么是错与fputcsv创建我的档案?第一个字节或什么?

回答

14

自动检测编码不是可以准确完成的。显式指定编码非常重要。在某些情况下可以猜到,但即使这样也不能100%确定。

本文档(Encoding)解释了有关记事本的情况++。 他们还指出,如果文件没有用字节顺序标记(BOM)保存,则会出现困难。

鉴于您的文件显示正确,一旦你手动设置编码,我会说没有什么错,你是如何产生和保存文件。您唯一可以检查的是BOM是否正在保存,这可能会提高Notepad ++能够自动检测编码的几率。

值得注意的是,虽然它可以帮助编辑器如记事本++更准确地识别编码,根据Unicode标准的文件,不建议BOM。

+0

有什么办法来控制PHP中的字节顺序标记? – Kamil

+1

恐怕我不是一个PHP的人,但我确实发现这可能有帮助:http://php.net/manual/en/function.utf8-encode.php#68211。请记住,物料清单是没有必要的(实际上不建议在Unicode标准文件中) –

+0

谢谢@chamila_c。这就是我想知道的。 – Kamil

6

您必须检查记事本++ GUI的右下角才能看到正在使用的实际代码。问题不在于Notepad ++的具体情况,因为猜测正确的编码是一个没有任何实际解决方案的大问题,所以最好让用户决定在每种情况下最合适的编码是什么。

0

当你想体现的文本文件的编码在Java程序中,必须考虑两个thnigs:编码和字符集。当您打开一个文本文件时,您会在“编码”菜单下看到编码。另外看看字符集菜单点。在“东欧”下面,您会看到“ISO 8859-2”,并在中欧“Windows-1250”下面。当您在表中查找时,可以在Java程序 中设置相应的编码: https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html 例如,对于中欧版字符集“Windows-1250”,表中建议使用Java编码“Cp1250”。设置编码,你会看到程序中的字符正确。

+0

你回答什么问题?实际的问题与java无关。 – Toto

+0

我回答了Notepad ++中与字符编码有关的问题。 –