1

「ゴーストのような」エラーが発生している私の以前の質問に関連して、ファイルの文字エンコードが正しいかどうかを確認することが提案されました。

問題のファイルは、EclipsePDTプラグインで作成された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 に答える