在Python中将PDF转换为txt,但无法保存

在Python中将PDF转换为txt,但无法保存,python,pdf,Python,Pdf,我编写了一段代码,它获取pdf文档并从中提取文本: from io import StringIO from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter f

我编写了一段代码,它获取pdf文档并从中提取文本:

from io import StringIO 

from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser

output_string = StringIO()
with open("C:\\Users\\document.pdf", 'rb') as in_file:
    parser = PDFParser(in_file)
    doc = PDFDocument(parser)
    rsrcmgr = PDFResourceManager()
    device = TextConverter(rsrcmgr, output_string, laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    for page in PDFPage.create_pages(doc):
        interpreter.process_page(page)

print(output_string.getvalue())
它工作正常,但我想自动将输出保存为txt文件。我试着在最后一行之前导入
sys
并写入
sys.stdout=open('document.test.txt','wt')
,但我得到了:

UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-8-4a73089c6ebb> in <module>
     18         interpreter.process_page(page)
     19 sys.stdout = open('document.test.txt','wt')
---> 20 print(output_string.getvalue())

~\anaconda3\lib\encodings\cp1252.py in encode(self, input, final)
     17 class IncrementalEncoder(codecs.IncrementalEncoder):
     18     def encode(self, input, final=False):
---> 19         return codecs.charmap_encode(input,self.errors,encoding_table)[0]
     20 
     21 class IncrementalDecoder(codecs.IncrementalDecoder):

UnicodeEncodeError: 'charmap' codec can't encode character '\u2192' in position 1614: character maps to <undefined>
UnicodeEncodeError回溯(最近一次呼叫最后一次)
在里面
18.翻译程序页面(第页)
19 sys.stdout=open('document.test.txt','wt')
--->20打印(输出字符串.getvalue())
编码中的~\anaconda3\lib\encodings\cp1252.py(self,input,final)
17类递增编码器(编解码器.递增编码器):
18 def编码(自身、输入、最终=假):
--->19返回编解码器.charmap_encode(输入、自身错误、编码_表)[0]
20
21类增量编码器(编解码器.增量编码器):
UnicodeEncodeError:“charmap”编解码器无法对位置1614中的字符“\u2192”进行编码:字符映射到

我认为文本本身没有问题,因为它在其他方面是有效的。我认为这是保存输出的错误方法。

这是否回答了您的问题?您不需要重新分配stdout
print(output_string.getvalue(),file=f)
会将输出发送到文件,但您仍然存在文本包含扩展字符的问题。U+2192是一个右向箭头。也许您需要以UTF-8格式打开文件。