0

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

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

当我从站点 B 导出时,该文件被报告为“UTF-8”编码,该文件不会在 Excel 中打开。如果我在 Textpad++ 中将文件转换为没有 BOM 的 ANSI 或 UTF-8,它在 Excel 中打开得很好。

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

还有什么可能导致我没有考虑到这一点?

谢谢!

更新

excel 一代是一个红鲱鱼,我已经删除了所有这些,只是输出了下载标题和一个测试字符串。保存后,文件在站点之间的编码仍然不同。当我比较各种文件时,生成下载文件的代码似乎相同......

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

4

2 回答 2

0

Thanks for all your input into this, it's much appreciated. In the end I tracked it down, a PHP source file was being included somewhere along the way which was encoded UTF-8 rather than ANSI (Windows-1252). I don't really understand why this causes a problem though, since that PHP include doesn't output anything. Very weird and very frustrating, I hope maybe someone else finds my pain useful.

于 2012-05-22T23:34:09.433 回答
0

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

没有 BOM的UTF-8表示 utf8,但没有附加一些奇怪的 utf 字符(我认为在文件顶部有 2 或 3 个),可能会导致 excel 头痛。

如果我想i18n,我总是不带 bom方法

于 2012-05-22T14:26:10.737 回答