我正在开发两个网站(在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的文件 - 我不明白还有什么可以进行。
答案 0 :(得分:0)
如果我正在思考 i18n
,我总是会用而不是bom 方法答案 1 :(得分:0)
感谢您对此的所有投入,非常感谢。最后我追踪它,一个PHP源文件被包含在编码UTF-8而不是ANSI(Windows-1252)的某个地方。我真的不明白为什么这会导致问题,因为PHP包含不会输出任何内容。非常奇怪而且非常令人沮丧,我希望也许别人觉得我的痛苦很有用。