查找并替换非 utf8 字符
Find and replace non utf8 character
我有一个将数据插入 PDF 的过程,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>¢
的撇号并将其替换为白色 space。
这里有几个复杂的地方,但总的来说,我会说处理它的唯一可靠方法是弄清楚传入文档的文本编码并转换到目标编码。
Ã<83>¢ââ<80><9a>‰â<80><9e>¢
是 34 个字符(即至少 34 个字节),并且没有任何一种编码曾使用那么多的 space 来表示单个字符.可能发生的是多级编码,例如 HTML 实体、base64、UTF-8/16/32 或像 %%
这样的转义字符在 SQL 或 [= 中表示 %
13=] 表示 Bash 中的 \
。手动反转所有这些级别的编码将涉及大量阅读庞大的 docx 标准。更简单的替代方法是使用一个库,它可以为您将整个文本转换为已知的字符编码,此时您最多只需将一次转换为 UTF-8。
另一个论点是“撇号字符串”确实包含其他无害的字符,如“a”和“e”。如果不至少 一些 理解编码,您就不可能将编码字符与非编码字符分开,这会使生成的文本充满无效文本。
我有一个将数据插入 PDF 的过程,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>¢
的撇号并将其替换为白色 space。
这里有几个复杂的地方,但总的来说,我会说处理它的唯一可靠方法是弄清楚传入文档的文本编码并转换到目标编码。
Ã<83>¢ââ<80><9a>‰â<80><9e>¢
是 34 个字符(即至少 34 个字节),并且没有任何一种编码曾使用那么多的 space 来表示单个字符.可能发生的是多级编码,例如 HTML 实体、base64、UTF-8/16/32 或像 %%
这样的转义字符在 SQL 或 [= 中表示 %
13=] 表示 Bash 中的 \
。手动反转所有这些级别的编码将涉及大量阅读庞大的 docx 标准。更简单的替代方法是使用一个库,它可以为您将整个文本转换为已知的字符编码,此时您最多只需将一次转换为 UTF-8。
另一个论点是“撇号字符串”确实包含其他无害的字符,如“a”和“e”。如果不至少 一些 理解编码,您就不可能将编码字符与非编码字符分开,这会使生成的文本充满无效文本。