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であると自動的に想定します...