在 Linux 服务器上,如果用户上传在 MS Office Excel 中创建的 CSV 文件(因此具有Windows 1250 [或cp1250或ASCII,如果你想] 编码)我所有已知的检测文件编码的方法返回不正确的 ISO-8859-1(或latin1,如果你想)编码。
这对于将编码转换为最终的 UTF-8至关重要。
我试过的方法:
- cli
file -i [FILE]
返回iso-8859-1file -b [FILE]
返回iso-8859-1
- vim
vim [FILE]
然后:set fileencoding?
返回latin1
- 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)?
我能想到的最后一个选项是在上传文件时检测用户代理(和用户操作系统),它是windows然后自动假设编码是ASCII ...