Yve*_*ves 5 character-encoding text-processing unicode
我有一个很长的法语文本文件需要清理。非 ASCII 字符已被奇数字符组合取代。例如,以下内容:
passer de très bonnes fêtes de fin d'année。
应该变成:(作为 Unicode 文本)
passer de très bonnes fêtes de fin d'année。
我试过 sed,但没有成功。一位朋友推荐尝试 Perl。我可以很容易地用奇怪的字符序列和正确的替换字符构建一个表格。理想情况下,我希望这张表是一个独立的文件,以备将来使用。此类转换的推荐方法是什么?
看起来您的文本是用 utf-8 编码的(这很好,因为它是 Unix 的标准),但是后来有人将其读取为 ISO 8859-1 / Microsoft 的 windows Latin-1,然后输出其解释。你需要扭转这一点。
例如
echo "passer de très bonnes fêtes de fin d'année" | iconv --to-code="ISO 8859-1"
Run Code Online (Sandbox Code Playgroud)
这将采用损坏的编码,并将其转换为有效的 utf-8。如果您的系统配置为 utf-8,那么它将正确读取。
说明:如果我们做echo è | od -t x1and echo ê | od -t x1,那么我们看到十六进制代码是c3 a8 0aand c3 aa 0a,然后我们在这里查看http://www.ascii-code.com/(这些是 iso 8859-1 代码,而不是 ascii )我们看到这些代码给è和ê都后跟一个隐形字符。所以现在我们知道出了什么问题:某些内容读取 utf-8,但将其解释为 iso 8859-1。所以我们现在需要反转它:我们以我们正在阅读的任何格式读取,然后转换为 iso 8859-1(与我们在这里的情况相反)。结果是有效的 utf-8。