为了账号安全,请及时绑定邮箱和手机立即绑定

使用 iText 解析 PDF 文档后反转希伯来语或数字

使用 iText 解析 PDF 文档后反转希伯来语或数字

米脂 2021-07-02 18:01:34
我正在使用 iText5 来解析主要用希伯来语编写的 pdf。要提取我使用的文本PdfTextExtractor.getTextFromPage。我没有找到更改库中编码的方法,文本显示为乱码。我试图解决这样的编码:new String(pdfPage.getBytes(Charset1), Charset2)。我使用了所有可能的字符集Charset.availableCharsets(),其中很少有人给了我希伯来语而不是胡言乱语,而是反过来了。现在我想我可以逐行反转文本,但是希伯来语是从右到左,数字和英语是从左到右。因此,如果我反转该行,它会修复希伯来语但会破坏数字/英语。例子:PdfTextExtractor.getTextFromPage 返回 87.55 úåáééçúä ééåëéð ë"äñnew String(text.getBytes(Charset.forName("ISO-8859-1")), Charset.forName("windows-1255")) 返回 87.55 תובייחתה ייוכינ כ"הס如果我扭转这个然后我得到סה"כ ניכויי התחייבות 55.78数字应该是87.55而不是55.78我找到的唯一解决方案是将其拆分为希伯来语和其余部分(英语/数字)并仅反转希伯来语部分,然后将其合并回来。没有更简单的解决方案吗?我觉得我在编码/RTL 方面遗漏了一些东西
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

首先,最合适的希伯来语字节字符集是“ISO-8859-8”(比 windows-1255 好)。尝试玩这个。另外,我会尝试使用字符集 UTF-8 提取字符串。


还有一个很棒的诊断工具可以帮助我诊断和解决与希伯来语和阿拉伯语相关的无数棘手的编码问题


有一个开源 Java 库 MgntUtils,它有一个实用程序,可以将字符串转换为 unicode 序列,反之亦然:

    result = "שלום את";

    result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);

    System.out.println(result);

    result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);

    System.out.println(result);

这段代码的输出是:


\u05e9\u05dc\u05d5\u05dd\u0020\u05d0\u05ea

שלום את

这是StringUnicodeEncoderDecoder类的javadoc如您所见,希伯来语的 Unicode 符号是 U+05**,其中第一个希伯来字母 (Alef -א) 是 U+05d0,最后一个希伯来字母 (Tav - ת) 是 U+05ea .


该库可以在Maven Central或Github 找到它作为 Maven 工件和源代码和 javadoc


所以我首先要做的是获取您的原始字符串并将其转换为 unicode 序列,然后看看您实际得到了什么。如果数据不正确,则尝试提取字节并使用 UTF-8 构建字符串。无论如何,我强烈建议使用此实用程序,因为它多次帮助了我。


查看完整回答
反对 回复 2021-07-14
  • 3 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信