为什么我得到“ق”而不是“fi”?

时间:2015-01-12 01:39:23

标签: python python-2.7 pdf character-encoding

我从文档中提取了文本,并且我注意到文本中有一些未知字符,例如:

"An adversary modiقes the aggregation result"

很明显ق不是真正的角色,应该用“fi”代替 - 还有其他类似的例子。

我可以使用python使用正确的英文字符替换这些字符吗?

我编写了以下代码,用于从pdf文件中提取和解码文本流:

import zlib

file = open ("PDF_File.pdf"."rb").read()  # read pdf file
objectPDF = re.findall('(\d+ \d+ obj.+?endobj)',file , re.DOTALL) # extract pdf 
                                                                   # objects
for item in objectPDF :
    pdfstreams = re.findall('stream(.*?)endstream',item  , re.DOTALL) # extract text 
                                                                      # stream 
                                                                      # encoded by                     
                                                                   # flatedecode filter
for item in pdfstreams :                                          
    buffer = item  
    decomp = zlib.decompress(buffer)   # decode each stream
    pdf_txt = open("Txt_PDF.txt","w")  
    pdf_txt .write(decomp)             # write the text to file
    pdf_txt .close()

1 个答案:

答案 0 :(得分:3)

您遇到编码错误:

>>> print u"modiقes".encode("cp1256").decode("mac_roman")
modifies

请注意,违规字符不是修改字符对fi而是修改单个字符U+FB01 'LATIN SMALL LIGATURE FI')的结果。

如果没有看到您的代码,就不可能完全发生这种情况,但归结为:您尝试将Mac OS Roman文字解码为Windows 1256。如果你停止这样做,你应该停止解决问题。