You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数字以四字节编码的字符编码类型及PDF文本解码方案咨询

处理自定义编码的PDF文本提取问题

问题背景

收到一份需程序化处理的商务PDF文档,无法正常解码其文本层。在Acrobat中显示内容为180CTNS 1800PCS,但提取底层文本层字节后得到以下十六进制序列:

f4 80 80 94 f4 80 80 9b  f4 80 80 93 f4 80 80 a6
f4 80 80 b7 f4 80 80 b1  f4 80 80 b6 20 f4 80 80
94 f4 80 80 9b f4 80 80  93 f4 80 80 93 f4 80 80
b3 f4 80 80 a6 f4 80 80  b6

可见生成该PDF的软件使用了自定义映射:数字'0'对应编码F480 8093,'1'对应F480 8094等,但无法用Python标准库编解码器解码该字节序列。

问题解答

1. 能否通过查询PDF文档得知Plane-B码点\U00100014对应数字'1'的显示规则?

可以通过分析PDF内部的字体映射表确认映射关系:

  • 查看PDF的字体字典,找到对应字体的ToUnicode CMap表,这个表直接定义了CID(字符标识符)到Unicode码点的映射,可直接查到U+100014对应的实际显示字符。
  • 若PDF未嵌入ToUnicode表,可查看字体的Encoding字典与字符集描述,结合字形名称(比如g1对应数字'1')反向推导映射规则。
  • 也可借助PDF解析工具(如pdftotext带参数解析,或专业PDF结构查看器)提取字体相关的映射数据。

2. 自行编写伪解码器是否为更优方案?

针对该客户的文件,自行编写映射解码器是高效且可行的最优方案:

  • 先通过手动对照(Acrobat显示内容与提取的字节序列)建立完整字符映射表,示例如下:
    # 示例映射表(需根据实际对照结果补充完整)
    char_mapping = {
        b'\xf4\x80\x80\x93': '0',
        b'\xf4\x80\x80\x94': '1',
        b'\xf4\x80\x80\x9b': '8',
        b'\xf4\x80\x80\xa6': 'C',
        b'\xf4\x80\x80\xb7': 'T',
        b'\xf4\x80\x80\xb1': 'N',
        b'\xf4\x80\x80\xb6': 'S',
        b'\xf4\x80\x80\xb3': 'P',
        b' ': ' '
    }
    
  • 编写解码逻辑:按4字节为单位拆分目标字节序列,匹配映射表替换为对应字符,同时处理空格这类单字节特殊字符。
  • 优势:无需依赖复杂的PDF解析库,直接针对该客户稳定的自定义编码规则处理,适配同类型文件的一致性需求,后续维护成本极低。

内容的提问来源于stack exchange,提问作者Kilian Foth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:04:59