PDFtotext - 命令行中空格显示为á
我正在用Python从一个通过pdftotext工具从PDF文件生成的文本文件中提取文本。这是2000个文件中的一个,在这个特定的文件中,有一行关键词以“EU”结尾。看起来这一行的其余部分是空的,下一行也是空的。
程序通常会去掉行末的空格,并忽略后面的空行。
但在这个情况下,它却保留了空格,当我在文本文件中打印出来时,可以看到“EU. ”之间的空白,在HTML中(Simile Exhibit)也是如此。
我还在命令行中打印了内容,这里我看到了一串“aacute”的字符串。[?]
我觉得处理这个问题的明显方法是搜索并替换这个“aacute”。我尝试用编译语句来做到这一点,并且玩弄了一些解码输入文本的组合。
奇怪的是,当我打印“\255”时,我没有得到“aacute”,而是得到了“o grave”。
看起来这些奇怪的错误组合让我对某些基本的东西产生了误解。有没有什么建议可以帮助我开始理清这个问题?
非常感谢。
1 个回答
第一个建议是,不要随便往各种输出地方打印信息,也不要用不明的编码。你需要搞清楚自己到底得到了什么。可以这样做:
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就不清楚了,而且这不是“空白字符”;它根本不应该显示,如果显示的话应该是一个连字符或减号,而不是空格。