1

我有一个将数据插入 PDF 的过程,该过程最终加载到基于插入数据进行搜索的系统中。插入的数据如下所示:

<<
/IBM-ODIndexes
<< /Private
<<
  /DOB (05031983)
  /FULL_NAME (TEST USER)
  /YEAR (2020)
>>
/LastModified(D:20210112201530)
>>

但是,在某些情况下,FULL_NAME字段中的数据包含非 UTF8 字符,然后用户无法搜索数据。具体来说,撇号来自 Microsoft Word,然后被解释如下:

/FULL_NAME (JERRY OÃ<83>¢ââ<80><9a>‰â<80><9e>¢CONNELL)

在这种情况下,我希望去掉表示为的撇号Ã<83>¢ââ<80><9a>‰â<80><9e>¢并将其​​替换为空格。

4

1 回答 1

1

这里有几个复杂性,但总的来说,我会说处理它的唯一可靠方法是找出传入文档的文本编码并将其转换为目标编码。

Ã<83>¢ââ<80><9a>‰â<80><9e>¢34个字符(即至少 34 个字节),并且没有任何一种编码曾经为单个字符使用过那么多空间。可能发生的是多级编码,例如 HTML 实体、base64、UTF-8/16/32 或转义字符,例如在 SQL 中表示或%%在Bash中表示。手动反转所有这些级别的编码将涉及大量阅读庞大的 docx 标准。更简单的替代方法是使用一个库,它可以为您将整个文本转换为已知的字符编码,此时您最多只需一次转换为 UTF-8。%\\\

对此的另一个论点是“撇号字符串”确实包含其他无害的字符,例如“a”和“e”。如果至少对编码有所了解,您就不可能将编码字符与非编码字符分开,这会使生成的文本充满无效文本。

于 2021-01-14T00:16:05.200 回答