linux - 为什么 Linux 中的 iconv 不能正确地将 UTF-8 中的西类牙字符转换为 ISO-8859-1

标签 linux utf-8 iso-8859-1 iconv

在 Linux 中,我使用以下命令将 UTF-8 文件转换为 ISO-8859-1 文件:

iconv -f UTF-8 -t ISO-8859-1//TRANSLIT input.txt > out.txt

转换后,当我打开out.txt

¿Quién Gómez is translated to ¿Quien Gomez.

为什么 éó 以及其他翻译不正确?

最佳答案

在 Unicode 中有(至少)两种表示重音字母 é 的方法:作为单个代码点 U+00E9,带尖音符号的拉丁文小写字母 E,并作为一个双字符序列 e (U+0065) 后跟 U+0301,组合重音符。

您的输入文件使用后一种编码,iconv 显然无法转换为 Latin-1 (ISO-8859-1)。使用 //TRANSLIT 后缀,它通过未修改的未重音 e 并删除组合字符。

您可能需要转换输入,使其不使用组合字符,将序列 U+0065 U+0301 替换为单个代码点 U+00E9(以2个字节表示)。要么,要么安排生成输入文件的任何内容首先使用该编码。

这就是问题所在;我目前不知道如何更正它。

关于linux - 为什么 Linux 中的 iconv 不能正确地将 UTF-8 中的西类牙字符转换为 ISO-8859-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086293/

相关文章:

java - UTF-8 和 ISO-8859-1 不适用于 Java 中的欧洲字符集解码

c++ - TinyXML 解析多字节字符但跳过 [x] 个字符

java - 比较两个在字典顺序上相同但在字节级别不相同的字符串

mysql - Hibernate Spring 编码字符集错误 [UTF-8]

java - 从大型 txt 文件中删除非 UTF-8 字符

pdf - CP1252 中标准 PDF 字体的 Adob​​e Font Metrics

java - JxBrowser 6.14.2 系统要求不明确。在多个 Linux 发行版上创建浏览器失败

c - 如何创建带有文件孔的文件?

c - 为什么 GTK 编译不起作用?

linux - cron 如何在内部安排作业?