0

Linuxサーバーで、ユーザーがMS Office Excelで作成されたCSVファイルをアップロードした場合(したがって、Windows 1250 [または必要に応じてcp1250またはASCII ]エンコーディングを使用)、ファイルエンコーディングを検出する既知の方法はすべて、誤ったISO-8859-1を返します(または必要に応じてlatin1 ) エンコーディング。

これは、最終的なUTF-8へのエンコーディング変換にとって重要です。

私が試した方法:

  • クリ
    • file -i [FILE]iso-8859-1を返す
    • file -b [FILE]iso-8859-1を返す
  • ヴィム
    • vim [FILE]そしてlatin1:set fileencoding?を返します
  • PHP
    • mb_detect_encoding(file_get_contents($filename))(驚くべきことに) UTF-8 を返す

ファイルは確かにWINDOWS-1250(ASCII)ですが、LibreOfficeでCSVファイルを開くと証明されます-数学はファイルエンコーディングを要求し、ISO-8859-1またはUTF-8のいずれかを選択すると誤って表示される文字になりますが、 ASCIIを選択するとすべてが表示されます文字正しく!

Linux サーバー (Ubuntu) でファイル エンコーディングを正しく検出する方法 (可能であれば、デフォルトの Ubuntu ユーティリティまたは PHP を使用するのが最適です)。

私が考えることができる最後のオプションは、ファイルをアップロードするときにユーザーエージェント(およびユーザーOS)を検出することです。それはWindowsであり、エンコーディングがASCIIであると自動的に想定します...

4

0 に答える 0