2

我正在使用 python 从使用 pdftotext 从 pdf 创建的文本文件中提取文本。它是 2000 个文件之一,在这个特定的文件中,一行关键字以 EU 结尾。该行的其余部分对肉眼来说是空白的,下面的行也是如此。

程序通常会去掉行尾的任何尾随空白并忽略随后的空白行。

在这种情况下,它保存了在“EU.”之间的文本文件中打印出来时看到的空格,类似地在 html 中(Simile Exhibit)。

我还打印到命令行,在这里我看到了一个 aacute 字符串。[?]

我认为解决这个问题的明显方法是搜索和替换acute。我试图用一个编译语句来做到这一点,并且我已经玩过解码传入文本的排列。

奇怪的是,当我打印“\255”时,我没有得到 aacute,而是得到一个 o 坟墓。

这种奇怪的错误组合似乎很可能使我误解了一些基本的东西。关于如何开始解开这个问题的任何提示?

非常感谢。

4

1 回答 1

0

第一个技巧是不要使用各种未说明的编码疯狂地打印到所有可能的输出机制。找出你有什么。做这个:

print repr(the_line_with_the_problem) # Python 2.x
print(ascii(the_line_with_the_problem)) # Python 3.x

并编辑您的问题并复制/粘贴结果。

第二个提示:寻求帮助时,请提供有关您的环境的信息:

什么版本的 Python?什么版本的什么操作系统?

还显示与语言环境相关的信息;以下示例来自我在 Windows 7 命令提示符窗口中运行 Python 2.7 的计算机:

>>> import sys, locale
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'cp850'
>>> locale.getdefaultlocale()
('en_AU', 'cp1252')
>>>

第三个提示:不要使用自己的行话……“Simile Exhibit”、“printed to the command line”和“compile statement”这些概念需要解释。

的相关性是"\255"什么?你从哪里得到那个的?

等待一些事实出现时的疯狂猜测:

(1) 违规字符是 U+00A0 NO-BREAK SPACE aka NBSP,它出现在您的文本中"\xA0",当使用命令提示符窗口发送到 Windows 上西欧语言环境中的标准输出时,将被视为已编码cp850,因此显示为a-急性的。这怎么可能变成o-grave是一个谜。

(2) "\255"==\xAD暗示违规字符是 U+00AD SOFT HYPHEN 但为什么这会被视为 o-grave 是一个谜,它不是“空白”;它根本不应该显示,它应该显示为连字符/减号,而不是空格。

于 2011-04-16T23:43:24.987 回答