1

和---关联我之前遇到的“幽灵般”错误的问题,建议检查我的文件的字符编码是否正确。

有问题的文件是使用 Eclipse PDT 插件创建的 PHP 文件。该文件被创建为 UTF-8,Eclipse 仍将其报告为 UTF-8 编码。但是,当我在我的 Ubuntu / Apache2 生产服务器上部署文件时,它由

$ file -bi

命令具有 US-ASCII 编码。但我可以打开并读取服务器上的精细文件(例如使用 Nano)并且所有字符都正确显示(没有?或其他替代符号)。

我使用 scp 或 sftp 以与其他几个相同的方式传输文件。

所以我的问题是:是$ file -bi可靠的还是我应该忽略它,因为文件可以打开并正常读取?

4

2 回答 2

2

file命令工作正常。它会告诉你它所能找到的最好的东西。这意味着,如果您的 PHP 文件没有 BOM 并且仅包含与 US-ASCII 匹配的字节,它将报告它。

但是,这并不意味着您的 Eclipse 配置错误。US-ASCII 是 UTF-8 的子集,UTF-8 被设计为向后兼容它。

因此,只有当 PHP 文件中有一个不能用 US-ASCII 表示的字符时,该file命令才能检测到该字符。

请记住,字符编码始终是您在数据旁边拥有的东西。如果你失去了这种关系并且你不知道编码,它通常会被破坏,因为你无法猜测编码。

file命令示例显示了这一点。该命令必须猜测(尽管有任何其他信息,它只有文件形式的数据),因此会告诉你它的最佳猜测(这很好)。但是,不要指望它会以不同的方式工作。

所以file命令很好,只是不要把错误的期望放在它上面。为工作使用正确的工具。Fileinfo 提供信息,不具有约束力。在 Eclipse 中,您可以指定保存文件的编码。那是有约束力的。

于 2012-12-30T15:02:15.617 回答
1

file 命令“嗅探”您的文件。如果它只包含 ISO-646 字符(ISO-646 是 UTF-8 的子集),文件将报告“ASCII”。

file 命令与 Apache 服务器如何提供文件几乎完全无关。问题是,Apache 提供什么内容类型的标头?您需要使用浏览器中的开发工具或其他工具才能查看。如果该标头错误,则需要修复 Apache 配置。

于 2012-12-30T14:51:20.040 回答