【发布时间】:2009-12-14 21:24:12
【问题描述】:
我从一个客户端收到了一堆 CSV 文件(这似乎是一个数据库转储),其中许多列都有如下奇怪的字符:
- Alain LefÃÆ'¨vre
- AngÃÆ'¨le Dubeau & La PietÃÆ'ÂÂ
代表一个é的字符似乎很多。有谁知道什么编码会为 é 产生那么多字符?我不知道他们从哪里获取这些 CSV 文件,但假设我无法以更好的格式获取它们,我该如何将它们转换为 UTF-8 之类的格式?
【问题讨论】:
我从一个客户端收到了一堆 CSV 文件(这似乎是一个数据库转储),其中许多列都有如下奇怪的字符:
代表一个é的字符似乎很多。有谁知道什么编码会为 é 产生那么多字符?我不知道他们从哪里获取这些 CSV 文件,但假设我无法以更好的格式获取它们,我该如何将它们转换为 UTF-8 之类的格式?
【问题讨论】:
它似乎是一个双重重新错误解码的 UTF-8。 也许可以通过将数据打开为 utf-8、将其保存为 Latin-1(可能)并再次打开为 UTF-8 来恢复数据。
【讨论】:
看起来它经历了一个损坏过程,其中数据被写入为 utf-8 但读入为 cp1252,这种情况发生了 3 次。这可能是可恢复的(我不知道它是否适用于每个字符,但至少对某些字符有效)通过将损坏的数据放入反向转换 - 以 utf8 形式读入,以 cp1252 形式写出,重复。有很多方法可以进行这种转换 - 使用 Tordek 建议的文本编辑器,使用如下命令行工具,或者使用数据库或编程语言中内置的编码功能。
unix shell prompt> echo Alain Lefèvre |
iconv -f utf-8 -t cp1252 |
iconv -f utf-8 -t cp1252 |
iconv -f utf-8 -t cp1252
Alain Lefèvre
unix shell prompt>
【讨论】:
代表一个é似乎有很多字符。
记住,字符≠字节。您在输出中看到的是字符;你需要做一些不寻常的事情才能真正看到字节。 (我建议使用“xxd”,一种与Vim 应用程序一起安装的工具;或“od”,这是GNU 操作系统的core utilities 之一。)
有谁知道什么编码会产生这种情况
一个擅长猜测字节流的字符编码的工具是“enca”Extremely Naive Charset Analyser。
【讨论】: