无法使用PHP将文件从ANSI转换为UTF-8

无法使用PHP将文件从ANSI转换为UTF-8,php,utf-8,Php,Utf 8,我有一个文件,其中包含一些西里尔字母。当我用Notepad++打开这个文件时,我看到它有ANSI编码。如果我使用Notepad++手动将其编码为UTF-8,那么一切都是绝对正常的——我可以在解析器中使用该文件并获得结果。但我想要的是用PHP以编程的方式实现。这是我在搜索SO和文档后尝试的: file_put_contents($file, utf8_encode(file_get_contents($file))); 在这种情况下,当我的算法解析结果文件时,它遇到了诸如“è”、“í”、“–”这

我有一个文件,其中包含一些西里尔字母。当我用Notepad++打开这个文件时,我看到它有ANSI编码。如果我使用Notepad++手动将其编码为UTF-8,那么一切都是绝对正常的——我可以在解析器中使用该文件并获得结果。但我想要的是用PHP以编程的方式实现。这是我在搜索SO和文档后尝试的:

file_put_contents($file, utf8_encode(file_get_contents($file)));
在这种情况下,当我的算法解析结果文件时,它遇到了诸如“è”、“í”、“–”这样的字母。换句话说,在这种情况下,我得到一些垃圾。我也试过:

file_put_contents($file, iconv('WINDOWS-1252', 'UTF-8', file_get_contents($file)));

但它也会产生同样的垃圾。所以,我真的很想知道如何通过编程实现Notepad++的功能。谢谢

Notepad++可能会将您的编码报告为ANSI,但这并不一定等同于Windows-1252。1252是拉丁字母表的编码,而1251是西里尔文字的编码。所以使用

file_put_contents($file, iconv('WINDOWS-1251', 'UTF-8', file_get_contents($file)));

使用iconv从1251转换为utf-8。

通过
mb\u detect\u编码($contents,'auto',true)
?@Graham运行文件内容时会得到什么。请稍等。我会检查的,好像我得到了一个空字符串。或许,mb_detect_编码不会检测到任何东西。我应该在任何转换之前还是之后做?我试着在转换前做。嗯,afaik Windows-1252是拉丁语,所以我想你的内容实际上是Windows-1251;在iconv中尝试一下。