PDFtotext - 命令行中空格显示为á

2 投票
1 回答
1020 浏览
提问于 2025-04-16 15:53

我正在用Python从一个通过pdftotext工具从PDF文件生成的文本文件中提取文本。这是2000个文件中的一个,在这个特定的文件中,有一行关键词以“EU”结尾。看起来这一行的其余部分是空的,下一行也是空的。

程序通常会去掉行末的空格,并忽略后面的空行。

但在这个情况下,它却保留了空格,当我在文本文件中打印出来时,可以看到“EU. ”之间的空白,在HTML中(Simile Exhibit)也是如此。

我还在命令行中打印了内容,这里我看到了一串“aacute”的字符串。[?]

我觉得处理这个问题的明显方法是搜索并替换这个“aacute”。我尝试用编译语句来做到这一点,并且玩弄了一些解码输入文本的组合。

奇怪的是,当我打印“\255”时,我没有得到“aacute”,而是得到了“o grave”。

看起来这些奇怪的错误组合让我对某些基本的东西产生了误解。有没有什么建议可以帮助我开始理清这个问题?

非常感谢。

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”、“打印到命令行”和“编译语句”这些概念需要解释。

"\255"这样的内容有什么关系?你是从哪里得到这个的?

在等待一些事实出现时的大胆猜测

(1) 可能有问题的字符是U+00A0 NO-BREAK SPACE,也就是NBSP,它在你的文本中显示为"\xA0",在Windows的命令提示符下用西欧地区的编码发送到标准输出时,会被当作cp850编码处理,因此显示为带重音的字母a。至于它怎么变成带重音的字母o,就很神秘了。

(2) "\255"等于\xAD,这意味着有问题的字符是U+00AD SOFT HYPHEN,但为什么它会被看作带重音的字母o就不清楚了,而且这不是“空白字符”;它根本不应该显示,如果显示的话应该是一个连字符或减号,而不是空格。

撰写回答