Php 从浏览器中保存为UTF-8编码与ANSI编码的文件-为什么?

Php 从浏览器中保存为UTF-8编码与ANSI编码的文件-为什么?,php,excel,encoding,utf-8,ansi,Php,Excel,Encoding,Utf 8,Ansi,我有两个网站,我正在开发(在PHP)。它们使用相同的代码提供XLS导出(使用PEAR excel),并且运行在同一台本地服务器上。为了排除xls中实际数据的问题,我现在只输出一个没有数据的文件 当我从站点A导出并保存文件时,它会报告为“ANSI”,并在Notepad++中编码。此文件在Excel中正确打开 当我从站点B导出时,该文件报告为“UTF-8”编码,该文件不会在Excel中打开。如果我在Textpad++中将文件转换为ANSI或UTF-8,而不使用BOM表,那么它在Excel中可以正常打

我有两个网站,我正在开发(在PHP)。它们使用相同的代码提供XLS导出(使用PEAR excel),并且运行在同一台本地服务器上。为了排除xls中实际数据的问题,我现在只输出一个没有数据的文件

当我从站点A导出并保存文件时,它会报告为“ANSI”,并在Notepad++中编码。此文件在Excel中正确打开

当我从站点B导出时,该文件报告为“UTF-8”编码,该文件不会在Excel中打开。如果我在Textpad++中将文件转换为ANSI或UTF-8,而不使用BOM表,那么它在Excel中可以正常打开

当我在站点上保存任意页面时,站点A和站点B之间存在相同的编码差异,因此我认为这可能比生成Excel文件的方式更基本(导出CSV/ODS格式时采用相同的编码)。在导出过程中,我比较了站点A和站点B之间的http头,它们在功能上是相同的。显式地将Charset=ISO-8859-1添加到标头没有任何区别。apache虚拟主机在站点之间的功能也相同。这两个站点在其数据库中使用相同的字符编码(但由于我现在没有导出任何数据,所以这与此无关)

还有什么我没有解释的原因呢

谢谢

更新

excel生成是一个麻烦事,我已经删除了所有这些,只需输出下载头和测试字符串。保存时,不同站点之间的文件编码仍然不同。当我区分不同的文件时,生成下载文件的代码似乎是相同的

我无法通过创建一个简化的测试用例来重复这个问题。当我尝试时,两个站点都输出了保存为ANSI的文件-我不知道还会发生什么。

ANSI的“模式”只是使用系统上的语言表来保存数据;您无法确定保存的文档是否对其他人可见

不带BOM的UTF-8表示utf8,但没有附加一些奇怪的UTF字符(我认为文件顶部有2或3个),这可能会让excel头疼


如果我想i18n的话,我会一直采用不带bom的方法。谢谢你的投入,非常感谢。最后,我找到了一个PHP源文件,它被编码为UTF-8,而不是ANSI(Windows-1252)。我真的不明白为什么这会导致一个问题,因为PHP包含没有输出任何东西。非常奇怪,非常令人沮丧,我希望其他人会觉得我的痛苦很有用。

ANSI使用系统代码页,只有当另一端使用相同的代码页时,它才会可读。是的,这不是很有帮助。站点A将浏览器中的文件保存在“ANSI”(Windows-1252)中,这正是我想要的。站点B(相同的代码,相同的服务器)正在UTF-8中保存文件,这些文件在Excel文件中不起作用。两个站点上的默认设置是否不同?可能其中一个设置了“始终另存为UTF-8”,而另一个没有设置。@rossum这些设置是在哪里定义的?(所有浏览器都有问题)@Frank D:我不知道这些设置是在哪里定义的。您的两个站点之间有些不同,否则它们将产生相同的输出。您必须阅读手册“恐怖!恐怖!”:)您在十六进制编辑器中看到了什么?假设用于创建文件的内容是完全相同的字节,并且Web服务器不会动态更改编码,则必须由excel生成库执行。我将开始对源代码进行greping。文件字节在十六进制编辑器中是不同的。我不明白为什么Web服务器会改变编码,因为它是具有相同vhost设置的同一台服务器。代码似乎是相同的,当我不同。。。我想知道是否有些php源文件是用不同的编码保存的,但还没有找到。。。