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

发布于 2024-12-27 14:48:34 字数 788 浏览 1 评论 0原文

我使用 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);
    }

I used iTextSharp for reading pdf file. i can read the english text, but for chinese i am getting question marks, how can i read chinese characters using 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);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何处潇湘 2025-01-03 14:48:34

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

来自 MSDN

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

Try replacing ASCIIEncoding with one of the other encoding classes (UTF8Encoding for example). I imagine PDF documents know which encoding they use so you might be able to find the correct one in the PdfReader object. Worth checking.

From the MSDN:

ASCIIEncoding corresponds to the Windows code page 20127. Because ASCII is a 7-bit encoding, ASCII characters are limited to the lowest 128 Unicode characters, from U+0000 to U+007F. If you use the default encoder returned by the Encoding.ASCII property or the ASCIIEncoding constructor, characters outside that range are replaced with a question mark (?) before the encoding operation is performed. Because the ASCIIEncoding class supports only a limited character set, the UTF8Encoding, UnicodeEncoding, and UTF32Encoding classes are better suited for globalized applications.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文