![Gedit 显示文本,但 cat 讲述了不同的故事](https://linux22.com/image/67010/Gedit%20%E6%98%BE%E7%A4%BA%E6%96%87%E6%9C%AC%EF%BC%8C%E4%BD%86%20cat%20%E8%AE%B2%E8%BF%B0%E4%BA%86%E4%B8%8D%E5%90%8C%E7%9A%84%E6%95%85%E4%BA%8B.png)
我正在尝试对字典进行排序格雷迪·沃德的《莫比》并且遇到了一些问题。当我在 gedit 中打开它时,我得到:
abaca×N
abaciscus×N
abacist×N
aback×v
abacli×p
Abaco×N
abactinal×A
abaculus×N
abacus×N
abac×N
Abadan×N
Abaddon×N
Abad×N
abaft×vP
Abagael×N
Abagail×N
等等。
然而,却
cat mobyposi.i | less
讲述了一个不同的故事。我最终得到了每一行开头<D7>
和结尾的混乱字符^M
,并且无法阅读。
^M
绝对是一个换行符,dos2unix 并没有解决这个问题。就目前而言<D7>
,我完全迷失了。我需要能够删除这两个内容以使人类可读,尽管我确信机器可以很好地通过它。 :/
我运行的是 Ubuntu 15.04。
答案1
该mobyposi.i
文件使用旧式 Mac 行结尾,即 CR 字符。为什么?我不知道。这个文件是1993年的,也许作者想要Mac友好,并认为Unix和Windows用户可以自己解决。或者也许作者犯了一个错误,文件readme
指出“词汇文件[有] CRLF (ASCII 13/10) 分隔符”,而分隔符实际上只是 CR。
单词和词性由字节 D7₁₆ = 215₁₀ = 327₈ 分隔。 Gedit 显示的字符×
是与该字节在 Latin-1 编码中对应的字形。
要将行结尾转换为 Unix 行结尾 (LF) 并将单词/部分分隔符转换为:
,请运行
LC_CTYPE=C tr '\r\327' '\n:' <mobyposi.i >mobyposi.txt
dos2unix
没有执行任何操作,因为输入没有 DOS 行结尾。 Gedit 自动检测到采用外来编码的文件(它检测到换行符,检测到单字节编码,并在众多可能性中选择 Latin-1,因为它是这样配置的)。 Less 不会自动检测外来编码,它会向您显示文件在您的语言环境中解释时的样子。