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

时间:2012-05-22 14:16:48

标签: php excel encoding utf-8 ansi

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

当我从站点A导出并保存文件时,它在Notepad ++中报告为“ANSI”编码。此文件在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的文件 - 我不明白还有什么可以进行。

2 个答案:

答案 0 :(得分:0)

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

没有BOM的 UTF-8 意味着utf8,但没有附加一些奇怪的utf字符(我认为在文件顶部有2或3个字符),可能会让人头疼。

如果我正在思考 i18n

,我总是会用而不是bom 方法

答案 1 :(得分:0)

感谢您对此的所有投入,非常感谢。最后我追踪它,一个PHP源文件被包含在编码UTF-8而不是ANSI(Windows-1252)的某个地方。我真的不明白为什么这会导致问题,因为PHP包含不会输出任何内容。非常奇怪而且非常令人沮丧,我希望也许别人觉得我的痛苦很有用。