如何解码LTTextLine.get\u文本()?

2024-06-28 20:30:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我对PDFminer不熟悉。我注意到在使用PDFminer get_text()命令时,有些符号/标点符号不是以文本形式输出的。例如,“-”显示为“\xe2\x80\x93”,单引号显示为“\xe2\x80\x99”。以下是我使用的命令:

打印(LTTextLine.get\u文本().encode('UTF-8'))

有人能帮我理解如何读这些,并把它转换成文字形式吗?你知道吗

谢谢。你知道吗


Tags: text文本命令get符号pdfminer形式encode
1条回答
网友
1楼 · 发布于 2024-06-28 20:30:55

您不喜欢的十六进制转义不是连字符(ascii39)和单引号(ascii45)。它们是排版连字符(又称破折号)(Unicode 2010)和右单引号(Unicode 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'

在所使用的字体中,ascii39和Unicode 2010之间没有太大的明显区别,但一般来说,排版连字符比ASCII连字符短、粗,更接近基线。另外两个之间的区别在法律上是相当清楚的 isn’t'。在.pdf文件中找到Unicode变体是很常见的,因为它们是用来打印的。ASCII变体实际上只适用于程序代码和旧打字机的模拟,而不适用于印刷书籍和杂志。你知道吗

相关问题 更多 >