4

我在 OS X 10.5.5 上(尽管我猜这并不重要)

我有一组带有花哨字符的文本文件,例如双反引号、省略号(“...”)在一个字符中等等。

我需要将这些文件转换为良好的老式纯 7 位 ASCII,最好不要丢失字符含义(即,将这些省略号转换为三个句点,将反引号转换为通常的 "s 等)。

请建议一些智能命令行(bash)工具/脚本来做到这一点。

4

5 回答 5

2

Elinks Web 浏览器会将 Unicode 实体转换为其 ASCII 等价物,例如“--”代表“-”,“...”代表“...”等。有一个 python 模块python -elinks使用相同的转换表,将其变成外壳过滤器将是微不足道的,如下所示:

#!/usr/bin/env python
import elinks
import sys
for line in sys.stdin:
    line = line.decode('utf-8')
    sys.stdout.write(line.encode('ASCII', 'elinks'))
于 2008-10-17T16:56:03.030 回答
1

据我所知,iconv应该这样做。不能 100% 确定它如何处理一个输入字符应该/可能成为多个输出字符的转换,例如省略号示例……尝试一下!

更新:我确实尝试过,但它似乎不起作用。它失败了,可能是因为它不知道如何以“较小”的编码表示省略号(我使用的测试字符)。从 UTF-8 转换为 UTF-16 很顺利。:/ 不过,iconv 可能值得进一步研究。

于 2008-10-17T16:30:42.410 回答
1

看看音译工具;我喜欢Unidecode(在 Perl 中),移植到其他语言并不难。

于 2008-10-17T16:48:08.600 回答
1

我已经使用 iconv 将由 Windows 中的 TextPad 创建的 UTF-16LE(我通过反复试验发现的小端序)转换为 OSX 上的 ASCII 文件,如下所示:

 cat utf16file.txt |iconv -f UTF-16LE -t ASCII > asciifile.txt

您也可以通过 hexdump 管道查看字符并确保您获得正确的输出,终端知道如何解释 UTF-16 并正确显示它,因此您不能只说对文件执行“cat” :

cat utf16file.txt | iconv -f UTF-16LE -t ASCII | hexdump -C 

这在右侧显示了十六进制字符代码和 ASCII 字符的布局,您可以在 -f "from" 参数中尝试不同的编码来确定您正在处理的内容。

使用 'iconv -l' 列出 iconv 可以在您的系统上使用的字符集。

于 2008-12-10T02:49:10.843 回答
0

昨天或前一天有一个关于文件重命名的问题,我展示了一个rename.pl可用于该任务的 Perl 脚本。问题领域是知道奇数字符是如何编码的,并设计出正确的音译序列。我可能会通过改编那个按顺序完成所有映射的脚本来做到这一点。一次只做一个角色会过于繁琐。

问题是:如何使用前缀/后缀重命名

于 2008-10-17T16:59:06.177 回答