我的 CSV 文件似乎以 UTF-8 正确编码。
iconv -f UTF-8 file.csv -o /dev/null # returns 0
当我尝试将文件重新编码为 cp1250(尝试重新编码/iconv 甚至 Perl)时,生成的文件以 iso-8859-1 编码 - 至少根据
file -i resulting_file.csv
resulting_file.csv: text/plain; charset=iso-8859-1
服务器上的区域设置是
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
我不知道为什么。任何帮助表示赞赏,谢谢。
【问题讨论】:
【参考方案1】:Iso-8895-1、iso-8895-15 和 Windows-1252 (CodePage1252) 字符集非常相似,只有少数字符和/或位置不同。例如,iso-8895-1 没有欧元 (€) 符号。 Windows-1252 和 -15 可以,但它映射到不同的字节。
file
使用“魔术”查找来猜测编码。如果文本中不存在使这些字符集不同的字符,则file
无法区分这三者。
听起来您确实有一些非 ASCII 拉丁字符,但不足以让 file
知道任何区别。
不过,您可以高枕无忧 - 您的文件与 Windows-1252 编码兼容。
【讨论】:
你说得对,我的 CSV 包含几个捷克字符。当我强制 emacs 在 cp1250 中打开文件时,它看起来是正确的。我在 Linux 中处理过很多文本文件,但这是我的第一个检测错误的案例(我不是在谈论格式错误的文件)。谢谢你的答案。