我遇到的一些文本文件包含小方块,其中有数字(代替某些字符)。我无法在 Ubuntu 中复制和粘贴这些,但可以gedit
单独搜索和替换每个字符(替换我认为最匹配的字符),显然这只有在只有几种类型的方块时才可行。
我相信这些方块之所以显示出来是因为我缺少某些字体......我的目标是将其转换为 ePub 或 PDF 文件。
我的问题是:
- 这是什么类型的编码?为什么会发生这种情况?
- 如果缺少字体,我可以安装它们吗?这能解决问题吗(允许我将符号转换为 PDF 例如使用
Calibre
)? - 有没有一个应用程序可以将我的文本文件转换为没有这些方块的文本文件,而不是替换将它们替换为类似的字符?例如,符号几乎是
y
,因此我希望此函数将 的每个实例替换为y
。
示例 txt 文件为这里它最初看起来像这样(请注意后面的不准确之处OCR
)。
注意:我无法让uni2ascii
或iconv
工作(尽管我可能没有使用正确的[选项]),所以在发布解决方案之前请检查给定的文件!
答案1
这些框的意思是“未找到字形”;框中的字符是 Unicode 中代码点的十六进制表示形式。
有两种可能:字符编码乱码,或者您使用的字体没有该字符的字形。如果您真的想了解字符编码,这是一个很好的概述:http://trochee.net/2011/05/character-encoding-tutorial/
答案2
据我所知,这些方块总是出现在使用特殊排版字符的地方。例如,在某些字体中ty
,按字母t
后跟字母的方式排版y
会在两个字母之间留下多余的、不必要的空格。因此,许多用于更高级排版的字体都有额外的字符,比如ty
应该读作“...ancient beau”的字符蒂温和的...”。由于您没有这些额外的字符(您可能甚至无法解码它们,因为它们可能没有 ascii/utf-8 代码),所以您会得到正方形。
我不知道如何复制实际的文本(在这种情况下,将 at
和 ay
作为单独的字符),但TeX、LaTeX 及其朋友也许可以提供帮助 - 他们不一定是字体专家,但他们都对排版感兴趣......
答案3
这不是我认识的任何编码。我猜想缺失的符号并不代表书写字符,而是表示有关 OCR 过程的额外信息。
使用灵活的解释ASCII 控制代码0C 可能表示分页符,0B 可能是制表符或其他空格。1D 和 1F 应该是“标记数据结构字段的分隔符”,但乍一看,1F 可能被用来表示未确认:
$ hexdump -C -s 0xa0 myfile.txt | grep -C 1 " 1f "
00000250 6c 64 20 6f 66 20 61 6e 63 69 65 6e 74 20 62 65 |ld of ancient be|
00000260 61 75 1f 20 61 20 74 65 6d 70 65 72 61 74 65 2c |au. a temperate,|
00000270 20 68 75 6d 69 64 20 72 65 67 69 6f 6e 20 77 68 | humid region wh|
00000280 6f 73 65 20 0a 6d 69 73 1f 20 75 6e 64 75 6c 61 |ose .mis. undula|
00000290 74 69 6e 67 20 68 69 6c 6c 73 20 68 61 64 20 62 |ting hills had b|
--
00000350 20 33 30 30 20 0a 73 70 65 63 69 65 73 20 6f 66 | 300 .species of|
00000360 20 74 72 65 65 73 20 67 72 65 1f 20 69 6e 63 6c | trees gre. incl|
00000370 75 64 69 6e 67 20 6d 61 70 6c 65 73 2c 20 63 61 |uding maples, ca|
--
000006a0 65 20 61 62 6f 75 74 20 31 30 20 6b 69 6c 6f 6d |e about 10 kilom|
000006b0 65 74 72 65 73 20 61 77 61 1f 20 62 65 79 6f 6e |etres awa. beyon|
000006c0 64 20 61 20 70 61 73 73 20 0a 63 61 6c 6c 65 64 |d a pass .called|
在此示例中,字节 1F 被简并地用来代替ty,
、w,
和y,
。
另一种可能性是文件在过去的编码转换过程中被损坏。也许指定符号字体的元数据被丢弃,或者更有意义的超出范围的字符被折叠成 ASCII。这与字符最初是罕见连字符的情况一致。
无论如何,以编程方式翻译所需的信息肯定不包含在文件中。除非您可以重新运行 OCR,否则我认为您运气不佳。