【发布时间】:2018-10-07 13:19:58
【问题描述】:
我有一个文件(来自美国国会图书馆的作者列表),其中包含以下行:
Arteaga, Ana Mar�ia
Corval�an-V�asquez, Oscar E.
(打印到 linux 控制台时)
我想读这些(读入熊猫数据框或一组行)
df = pd.read_csv(fname, sep='\t', header='infer', lineterminator=None,encoding='latin1') #lineterminator \r\n hits error
或
with open(fname,'r',encoding='ISO-8859-1') as fp:
lines=fp.readlines()
但两者都不完全正确,给我这样的输出
阿蒂亚加,安娜·玛拉亚
(再次打印到控制台时) 当我很确定这里的实际名字应该是玛丽亚时。
有人认识这种格式吗?
【问题讨论】:
-
你得到字节的来源说字符编码是什么?你能回过头来问问(或者听,比如 Content-Type HTTP 响应头)吗?
-
名字应该是 Arteaga, Ana María 和 Corvalán Vásquez, Oscar E.。因此,无论替换字符(黑色菱形中的问号)出现在哪里,它都位于应该重音的字符旁边。这可能表明原始文件是 UTF-8。使用 hexdump 工具检查重音字符是否需要一个字节 (ISO-8559-1) 或两个字节 (UTF-8)。请注意,编码不匹配也可能是由于您的控制台造成的。它也需要配置正确的编码。
-
原始文件在 Marâi 的âi处有 0xE269。如果将其视为一个字节/字符,那么您确实会得到 âi,而如果您将 E269 视为一个两字节代码点,它指向一个私有用户区域,我不认为这是预期的。我在这个文件中也看到了一个“Josâe”,又是 0xE2 出现在 e 之前,所以看起来 0xE2 被用来表示即将到来的字符的重音版本。这听起来像是某人已知的格式吗?
标签: pandas utf-8 iso-8859-1