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

使用iText读取PDF时遭遇'StandardEncoding'不支持错误的求助

解决iText读取PDF时“StandardEncoding is not a supported encoding name”错误

核心原因

PDF规范中的StandardEncoding是一种自定义字符编码,.NET默认编码库未直接注册该编码名称,导致iText内部调用Encoding.GetEncoding("StandardEncoding")时抛出异常。

解决方案

1. 创建自定义编码映射提供者

编写一个自定义EncodingProvider,将StandardEncoding名称映射到与你的PDF字符兼容的现有编码(根据你描述的文档字符匹配情况,这里映射到Windows-1252):

using System.Text;

public class PdfCustomEncodingProvider : EncodingProvider
{
    public override Encoding GetEncoding(string name)
    {
        // 匹配StandardEncoding名称,映射到Windows-1252编码
        if (string.Equals(name, "StandardEncoding", StringComparison.OrdinalIgnoreCase))
        {
            return Encoding.GetEncoding(1252);
        }
        return null;
    }

    public override Encoding GetEncoding(int codepage)
    {
        return null;
    }
}

2. 注册编码提供者并提取文本

在调用PdfTextExtractor.GetTextFromPage前,先注册自定义提供者和系统扩展编码页提供者:

// 注册自定义PDF编码映射
Encoding.RegisterProvider(new PdfCustomEncodingProvider());
// 注册系统扩展编码页(需先安装System.Text.Encoding.CodePages NuGet包)
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

// 正常执行文本提取逻辑
using (PdfReader reader = new PdfReader("目标文件路径.pdf"))
{
    using (PdfDocument doc = new PdfDocument(reader))
    {
        for (int pageNum = 1; pageNum <= doc.GetNumberOfPages(); pageNum++)
        {
            string pageText = PdfTextExtractor.GetTextFromPage(doc.GetPage(pageNum));
            // 处理提取到的文本
        }
    }
}

3. 前置依赖(.NET Core/.NET 5+项目)

需要先安装System.Text.Encoding.CodePages NuGet包,否则CodePagesEncodingProvider无法正常使用。

补充说明

  • 你直接用Windows-1252处理仍报错,是因为iText内部是通过StandardEncoding这个名称查找编码,而非直接使用代码页,所以必须通过自定义提供者完成名称映射。
  • GetContentBytes获取的是页面原始内容流,并非结构化文本,因此无法直接得到有效文本内容,仍需使用PdfTextExtractor。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:15:11