iconv - 如果可能转换字符编码,否则保留原字符编码

3
考虑以下文本行的示例:
α Arietis,称为Hamal,是白羊座中最亮的星。它的传统名称源自阿拉伯语“羔羊”或“公羊头”(ras al-hamal)的单词。
它有三个不同的UTF-8字符:α,一个左智能引号和一个右智能引号。
我的目标是尽可能多地从UTF-8转换为常规ASCII,但保留任何无法转换的字符。(在上面的示例文本中,智能引号可以转写为",但α不能。)
我的当前命令是:
iconv -f UTF-8 -t ASCII//TRANSLIT < iconv.sample

然而,它无法转换α并以iconv:(stdin):1:0:cannot convert结束。
如果我在目标文本中添加//IGNORE或使用-c选项,则会完全删除α
如何进行音译(如果可能),但如果不行则返回原始输入字符?
1个回答

2

使用iconv时,我不确定是否可能,因为输出编码必须符合规范(也就是说,如果您指定ASCII,它只会输出ASCII,无论如何)。

如果您有可用的uconv,则可以指定转换操作以远离输出编码:

uconv -f "UTF-8" -t "UTF-8" -x "Latin-ASCII"

作为一个例子:
$ echo "α Arietis “head of the ram”" | uconv -f "UTF-8" -t "UTF-8" -x "Latin-ASCII"
α Arietis "head of the ram"

这正是我正在寻找的!我甚至不知道uconv是一个实用程序。 - Mr. Llama
我有点晚重新审视这个问题,但似乎“Latin-ASCII”有一个坏习惯,即将带重音的字符转换为不带重音的ASCII字符。正确的音译似乎是“-x ':: [[:Punctuation:][:Symbol:]] Latin-ASCII;'”。这仅将“Latin-ASCII”变换应用于标点符号和符号。 - Mr. Llama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接