如何读取古代编码的文本文件?

How to read a text file in ancient encoding?

有一个名为 Moby 的 public 项目,其中包含几个单词列表。一些文件包含欧洲字母符号并且是在 Unicode 之前的时间创建的。自述文件,日期为 1993 年,内容如下:

"Foreign words commonly used in English usually include their diacritical marks, for example, the acute accent e is denoted by ASCII 142."

维基百科说最后一个 ASCII 符号的数字是 127。

例如,此文件:http://www.gutenberg.org/files/3203/files/mobypos.txt 包含我无法在任何各种拉丁编码中读取的符号。 (在以 B 开头的单词的最后部分,就在 C 字母之前,有很多这样的符号。)

有人可以建议应该使用什么编码来读取这个文件,或者如何将它转换成一些可读的现代编码?

一点研究表明此页面的编码是 Mac OS Roman,它在位置 142 处有 é。查看您链接的页面并更改编码(在 Chrome 中, View → Encoding → Western (Macintosh)) 似乎正确显示了所有单词(它错误地报告了 ISO-8859-1)。

你如何处理这个取决于你使用的语言/工具。这是一个如何使用 Ruby:

转换为 UTF-8 的示例
require 'open-uri'

s = open('http://www.gutenberg.org/files/3203/files/mobypos.txt').read
s.force_encoding('macroman')
s.encode!('utf-8')

你是对的,ASCII 只上升到位置 127(它是一个 7 位编码),但是有大量的 8 位编码是 ASCII 的超集,人们有时将它们称为 “Extended ASCII”。看来您提到的自述文件的编写者并不知道编码的多样性,并认为他当时碰巧使用的编码是通用的。

此类问题没有通用的解决方案,因为无法保证从文本本身确定某些文本的编码。在这种情况下,我只是使用维基百科浏览了一些,直到找到一个匹配的。如果您想了解更多信息,Joel Spolsky 的文章 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) 是开始阅读有关字符集和编码的好地方。