Charset在Eclipse中是utf-8,在服务器上部署时报告为us-ascii

时间:2012-12-30 14:46:41

标签: php eclipse utf-8 character-encoding ascii

关于a previous question of mine我遇到“鬼似”错误,建议检查我的文件的字符编码是否正确。

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

报告
$ file -bi

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

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

所以我的问题是这样的:$ file -bi是否可靠,或者我应该忽略这个,因为文件可以打开并且读取正常吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

请记住,字符编码总是 next 数据。如果你失去了这种关系并且你不知道编码,那么它通常会被破坏,因为你无法猜测编码。

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

所以file命令没问题,只是不要对它抱错。使用正确的工具完成工作。 Fileinfo是信息性的,不具有约束力。在Eclipse内部,您可以指定保存文件的编码。这是有约束力的。

答案 1 :(得分:1)

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

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