在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]
然后:set fileencoding?
返回 latin1 mb_detect_encoding(file_get_contents($filename))
返回(令人惊讶) UTF-8 虽然该文件确实在WINDOWS-1250(ASCII)中证明即在LibreOffice中打开CSV文件 - Math要求文件编码并选择 ISO-8859-1 < / em>或 UTF-8 会导致错误显示的字符,而选择 ASCII 会正确显示所有字符!
如何在Linux服务器(Ubuntu)上正确检测文件编码(如果可能,最好使用默认的Ubuntu实用程序或PHP)?
我能想到的最后一个选项是在上传文件时检测用户代理(和用户操作系统),它是 windows 然后自动假设编码是 ASCII ...