将 UTF-8 文件转换为 ASCII(尽力而为)

将 UTF-8 文件转换为 ASCII(尽力而为)

我有一个 UTF-8 格式的文件,其中包含多种语言的文本。很多都是人的名字。我需要将其转换为 ASCII,并且需要结果看起来尽可能合适。

有多种方法可以将较宽的编码转换为较窄的编码。最简单的转换是用一些占位符替换所有非 ASCII 字符,例如“_”。如果我知道文件所用的语言,则还有其他可能性,例如罗马化。

Unix 上可用的 Unix 工具或编程语言库可以为我提供从 UTF-8 到 ASCII 的体面(尽力)转换?

大部分文本都是欧洲拉丁语言。

答案1

这对某些事情有用:

iconv -f utf-8 -t ascii//TRANSLIT

echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT返回helloe ?。任何不知道如何转换的字符iconv都将被替换为问号。

iconv是POSIX,但我不知道是否所有系统都有这个TRANSLIT选项。它在 Linux 上对我有用。此外,该IGNORE选项将默默地丢弃无法在目标字符集中表示的字符(请参阅 参考资料man iconv_open)。

一个较差但符合 POSIX 标准的选项是使用tr.此命令用问号替换所有非 ASCII 代码点。它一次读取一个字节的 UTF-8 文本。 “É” 可以替换为E??,具体取决于它是使用组合重音符号还是预组合字符进行编码。

echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'

该示例caf? ?????使用预组合字符返回 。

答案2

konwert utf8-ascii

它将根据转换表进行尽力而为的转换。如果您大致了解输入语言,则可以使用特定于语言的过滤器提供更好的结果,例如

konwert utf8-xmetodo

将世界语转换为 x-metodo 表示形式,

konwert UTF8-tex

将尝试进行变音符号的 TeX 表示,有语言特定的参数:

konwert UTF8-ascii/de

会将“ä”音译为“ae”(德语的习惯),而不是简单的“a”

konwert UTF8-ascii/rosyjski

将使用波兰规则来音译俄语,而不是“类似英语”的规则,等等......

答案3

尝试uni2ascii -B input.txt >output.txt

uni2ascii

答案4

我有一个 UTF-8 格式的文件,其中包含多种语言的[人名][我想将其转换为有意义的 ASCII 格式]。

您的意思是您希望能够将以下名称转换为相关人员不会反对的某个 ASCII 字符串?

  • ஸ்றீனிவாஸராமானுஜன்ஐயங்கார்
  • 奥巴德·阿德·阿德·阿德

我怀疑没有自动化工具可以做到这一点。人名可以没有拉丁化,也可以有很多拉丁化。软件无法选择文化上可接受的版本。至少在软件不了解相关人员的文化的情况下是这样。

也可以看看https://stackoverflow.com/a/1398403/477035

相关内容