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

use*_*610 33 character-encoding text natural-language

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

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

Unix 上可用的什么 Unix 工具或编程语言库可以让我从 UTF-8 到 ASCII 进行体面的(尽力而为)转换?

大部分文本是基于欧洲、拉丁类型的语言。

yel*_*hil 39

这将适用于某些事情:

iconv -f utf-8 -t ascii//TRANSLIT
Run Code Online (Sandbox Code Playgroud)

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' '[?*]'
Run Code Online (Sandbox Code Playgroud)

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

  • `iconv -f utf-8 -t ascii//TRANSLIT` 对我来说效果很好。它将卷曲引号更改为直引号。谢谢。 (3认同)
  • `iconv` 的 `-c` 选项静默丢弃无法转换的字符而不是终止 (3认同)

Rad*_*bík 17

konwert utf8-ascii
Run Code Online (Sandbox Code Playgroud)

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

konwert utf8-xmetodo
Run Code Online (Sandbox Code Playgroud)

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

konwert UTF8-tex
Run Code Online (Sandbox Code Playgroud)

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

konwert UTF8-ascii/de
Run Code Online (Sandbox Code Playgroud)

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

konwert UTF8-ascii/rosyjski
Run Code Online (Sandbox Code Playgroud)

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

  • 这是“konwert”网站的最新位置吗?它在任何地方都打包了吗?https://github.com/taw/konwert/tree/master/konwert-1.8 (2认同)

phi*_*urn 6

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

uni2ascii