Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PDFminer因无法识别的字符而出错_Python_Character Encoding_Pdfminer - Fatal编程技术网

Python PDFminer因无法识别的字符而出错

Python PDFminer因无法识别的字符而出错,python,character-encoding,pdfminer,Python,Character Encoding,Pdfminer,尝试使用pdfminer从pdf中提取文本时,出现以下错误: ValueError:unichr()参数不在范围内(0x110000)(宽Python构建) 似乎存在无法识别的字符,并且一个字符在提取其余文本之前抛出错误。utf整数大于110000。大多数此类错误都与狭窄的Python构建有关,但在本例中并非如此 错误似乎出现在pdfminer中的name2unicode函数中: <ipython-input-87-ebcd473faf08> in name2unicode(name

尝试使用pdfminer从pdf中提取文本时,出现以下错误:

ValueError:unichr()参数不在范围内(0x110000)(宽Python构建)

似乎存在无法识别的字符,并且一个字符在提取其余文本之前抛出错误。utf整数大于110000。大多数此类错误都与狭窄的Python构建有关,但在本例中并非如此

错误似乎出现在pdfminer中的name2unicode函数中:

<ipython-input-87-ebcd473faf08> in name2unicode(name)
     13     if not m:
     14         raise KeyError(name)
---> 15     return unichr(int(m.group(0)))
name2unicode(名称)中的

13如果不是m:
14 raise KeyError(名称)
--->15返回unichr(内部(m.group(0)))

我发现了那个令人讨厌的角色。它的unicode int比范围大得多,我还没有找到相应的符号。

pdfminer函数设置为跳过键错误(调用函数在尝试中,但在键错误后传递),但当它是超出范围的错误时,将忽略该错误。您可以通过更改原始函数来修复此问题,如下所示:

import re
from pdfminer.psparser import PSLiteral
from pdfminer.glyphlist import glyphname2unicode
from pdfminer.latin_enc import ENCODING
STRIP_NAME = re.compile(r'[0-9]+')
def edit_name2unicode(name):
    """Converts Adobe glyph names to Unicode numbers."""
    if name in glyphname2unicode:
        return glyphname2unicode[name]
    m = STRIP_NAME.search(name)
#     print('name: '+name)
#     print('m: '+str(m))
    if not m or m>110000:
        raise KeyError(name)
    return unichr(int(m.group(0)))

pdfminer.encodingdb.name2unicode = edit_name2unicode
最后请注意,在为整个文档导入pdfminer后,必须将旧函数设置为新函数。 这是一个运行时解决方案,对于一个必须多次完成的过程,我将更改源文档,尤其是因为pdfminer没有良好的类结构,您无法轻松继承和覆盖

但是,如果要保留的字符存在关键错误,可以将其添加到pypdf或添加其他字符集编码