Неправильная печать строки Юникода - PullRequest
0 голосов
/ 19 октября 2018

Я использую PyPDF2 для чтения PDF-файла, но получаю строку в кодировке Unicode.

Я не знаю, какова кодировка, затем попробуйте вывести первые 8 символов в шестнадцатеричный код:

0000  005b 00d7 00c1 00e8 00d4 00c5 00d5        [......

Что означают эти байты?это utf-16be / le?

Я пробую приведенный ниже код, но вывод неправильный:

print outStr.encode('utf-16be').decode('utf-16')
嬀휀섀퐀씀픀

Если печатать напрямую, python сообщит об ошибке:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-7: ordinal not in range(128)

Я следую инструкции из Как извлечь текст из PDF в Python

Раздел кода, как показано ниже:

import PyPDF2
import textract
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

FILTER = ''.join([(len(repr(chr(x))) == 3) and chr(x) or '.' for x in range(256)])
def dumpUnicodeString(src, length=8):
    result = []
    for i in xrange(0, len(src), length):
       unichars = src[i:i+length]
       hex = ' '.join(["%04x" % ord(x) for x in unichars])
       printable = ''.join(["%s" % ((ord(x) <= 127 and FILTER[ord(x)]) or '.') for x in unichars])
       result.append("%04x  %-*s  %s\n" % (i*2, length*5, hex, printable))
    return ''.join(result)

def extractPdfText(filePath=''):
    fileObject = open(filePath, 'rb')
    pdfFileReader = PyPDF2.PdfFileReader(fileObject)
    totalPageNumber = pdfFileReader.numPages

    currentPageNumber = 0
    text = ''
    while(currentPageNumber < totalPageNumber ):
        pdfPage = pdfFileReader.getPage(currentPageNumber)
        text = text + pdfPage.extractText()
        currentPageNumber += 1

    if(text == ''):
        text = textract.process(filePath, method='tesseract', encoding='utf-8')       
    return text

if __name__ == '__main__': 
    pdfFilePath = 'a.pdf'
    pdfText = extractPdfText(pdfFilePath)
    #pdfText = pdfText[:7]
    print dumpUnicodeString(pdfText)
    print pdfText 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...