0

因此,我得到了一些希伯来语 PDF 文件,我想将其翻译成英文,当尝试将 PDF 文件中的文本复制并粘贴到文本编辑器中时,所有希伯来语最终字母都被错误地复制了。

我找到了这个问题,但没有找到解决方案,而且这个问题只是在谈论一个被错误阅读的特定最后一封信,它只是指一个特定的图书馆。

我尝试从 acrobat 阅读器和 chrome PDF 查看器中复制和粘贴,但都无法正确复制它们的内容。

我发现的另一个有趣的事情是,当您在浏览器中按 Ctrl+F(我在 chrome 上尝试过)并搜索最后一个字母“Pe”时,它会给出常规“Pe”和最后一个“Pe”的结果"(反之亦然,当您搜索常规“Pe”时),即使它们具有不同的代码点(以及 ANSI 代码页中的不同代码),这也很奇怪。(所有最后的字母和它们对应的常规字母都是一样的)

所以问题是 -有谁知道为什么会这样?
我知道可能没有映射到字形的实际代码点,但在这种情况下,字符是如何呈现的?我对这个主题不是很熟悉,所以我会很感激任何解释。此外,任何可以让我提取带有最终字母的文本的好的解决方案都将非常感激,因为我想解析文本并且弄乱了字母会导致单词不完整。

编辑:
根据 weibeld 的要求,我添加了一些复制的单词和相应的正确单词。我还将添加他们的 hexdump。

E1 F7 F8 1B    בקר.  # Should be בקרן (Final letter "Nun") Switches every 
final Nun with 1B instead of EF according to the windows 1255 code page.

F2 F1 F7 E9 E9 17 עסקיי. # Should be עסקיים (Final letter "Mem") Switches 
every final Mem with 17 instead of ED.  

谢谢!

4

2 回答 2

1

因此,根据您的编辑,PDF 文件似乎使用一些奇怪的(非 ASCII 兼容的)希伯来语编码进行文本提取,它将字母的最终形式1X放置在 ASCII 中不可打印的控制字符所在的区域。

如果您只想重建 PDF 中的文本,最简单的解决方案可能是,不要更改 PDF,而是在从 PDF 复制文本后用正确的代码替换错误的代码。

例如,将从 PDF 复制的文本粘贴到file,然后:

cat file | tr '\033' '\357' | tr '\027' '\355' >out_file

也就是说,tr每个错误的最后一个字母都有一个。数字033357只是十六进制字节的八进制形式1BEF等等,你发现了hexdump。只需找出剩余的映射并将它们添加到链中即可。然后out_file应该包含正确编码的文本,您可以使用 Windows-1255 使用一些文本编辑器打开它。

于 2017-07-14T18:31:54.363 回答
0

PDF 参考在很大程度上没有说明对非拉丁非 CJK 文本进行文本提取的正确方法(渲染字形不需要这些),但基本上有两种方法:第一种是有一个 ToUnicode 表(对于简单字体和复合字体),第二个,对于简单字体,是指定一个编码字典,其中包含一个差异数组,用 Adob​​e 注册表中的名称标识每个字形(例如https://github.com/adobe-type-工具/agl-aglfn/blob/master/glyphlist.txt)。

Identity-H 编码意味着一种复合(双字节)字体,它可能有一个 ToUnicode 表。自定义编码意味着具有差异数组的编码字典。标准编码意味着没有指定预定义(或自定义)编码。

这三者的混合意味着一个非常混乱的起源。

于 2017-07-12T15:07:13.817 回答