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? ?????
使用预先组合的字符返回。
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)
将使用波兰语规则来音译俄语,而不是“类似英语”的规则,等等......