我是PDFminer的新手。我注意到使用PDFminer get_text()命令时,某些符号/标点符号未以文字形式输出。例如,“-”表示为“ \ xe2 \ x80 \ x93”,单引号'表示为“ \ xe2 \ x80 \ x99”。这是我使用的命令:
print(LTTextLine.get_text()。encode('UTF-8'))
有人可以帮助我理解如何阅读这些内容,并将其转换回原义吗?
谢谢。
答案 0 :(得分:0)
您不喜欢的十六进制转义符不是连字符(ASCII 39)和单引号(ASCII 45)。他们是印刷连字符(又名EN-破折号)–
(统一2010)和右单(“智能”)引号’
(统一2019)。它们被编码为UTF-8。如果你想将它们解码,处理包含它们的字符串作为字节,而不是字符串(注意b
前缀):
>>> mystring = b"This is an en\xe2\x80\x93dash and this - isn\xe2\x80\x99t"
>>> mystring.decode('UTF8')
'This is an en–dash and this - isn’t'
如果Python中认为该数据已经是一个字符串,如下面,没有b
前缀,那么你需要说服它,它真是个字节,结果解码:
>>> mystring = "This is an en\xe2\x80\x93dash and this - isn\xe2\x80\x99t"
>>> bytes(mystring.encode("latin-1")).decode("UTF-8")
'This is an en–dash and this - isn’t'
在字体,SO使用没有ASCII 39和2010之间的Unicode多明显不同但在一般的印刷连字符较短,更厚和更接近基线比ASCII连字符。其他两个之间的区别是相当明确的
isn’t'
。这是常见的,找到的Unicode在.pdf
文件变种,因为他们要印刷。该ASCII变体,才适合在程序代码中,老打字机的仿真;而不是印刷书籍和杂志。