Как декодировать вывод LTTextLine.get_text ()? - PullRequest
0 голосов
/ 31 января 2019

Я новичок в PDFminer.Я заметил, что некоторые символы / знаки препинания не выводятся в буквальной форме при использовании команды PDFminer get_text ().Например, «-» получилось как «\ xe2 \ x80 \ x93», а одинарные кавычки - как «\ xe2 \ x80 \ x99».Вот команда, которую я использовал:

print (LTTextLine.get_text (). Encode ('UTF-8'))

Может кто-нибудь помочь мне понять, как их читать, и преобразовать ее обратно вбуквальная форма?

Спасибо.

1 Ответ

0 голосов
/ 01 февраля 2019

Гексаны, которые вам не нравятся, не являются дефисами (ASCII 39) и одиночными кавычками (ASCII 45).Это типографские дефисы (aka en-dashes) (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'

В шрифте, который использует SO, между ASCII 39 и Unicode нет особых различий2010, но в целом типографский дефис короче, толще и ближе к базовой линии, чем дефис ASCII.Различие между двумя другими довольно ясно в isn’t'.Обычно варианты Unicode можно найти в файлах .pdf, поскольку они предназначены для печати.Варианты ASCII действительно подходят только для программного кода и эмуляции старых пишущих машинок;непечатные книги и журналы.

...