在c#中使用iTextSharp读取中文文本字符

时间:2012-01-16 12:27:44

标签: c# pdf-reader

我使用iTextSharp来阅读pdf文件。我可以阅读英文文本,但对于中文我会收到问号,如何使用iTextSharp阅读中文字符。

coverNoteFilePath = @"D:\Temp\cc8a12e6-399a-4146-81ac-e49eb67e7e1b\CoverNote.pdf";
    try
    {
        PdfReader reader = new PdfReader(coverNoteFilePath);

        for (int page = 1; page <= reader.NumberOfPages; page++)
        {
            ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy();
            String s = PdfTextExtractor.GetTextFromPage(reader, page, its);

            s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s)));
            coverNoteContent = coverNoteContent + s;

        }
        reader.Close();
        Response.Write(coverNoteContent);
    }

1 个答案:

答案 0 :(得分:0)

尝试将ASCIIEncoding替换为其他编码类之一(例如UTF8Encoding)。我想PDF文档知道它们使用哪种编码,因此您可以在PdfReader对象中找到正确的编码。值得一试。

来自MSDN

  

ASCIIEncoding对应于Windows代码页20127.由于ASCII是7位编码,因此ASCII字符限制为最低128个Unicode字符,从U + 0000到U + 007F。如果使用Encoding.ASCII属性或ASCIIEncoding构造函数返回的默认编码器,则在执行编码操作之前,该范围之外的字符将替换为问号(?)。由于ASCIIEncoding类仅支持有限的字符集,因此UTF8Encoding,UnicodeEncoding和UTF32Encoding类更适合全球化的应用程序。