[英]Find and replace non utf8 character
我有一个将数据插入 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>¢
的撇号并将其替换为空格.
这里有几个复杂性,但总的来说,我会说处理它的唯一可靠方法是找出传入文档的文本编码并将其转换为目标编码。
Ã<83>¢ââ<80><9a>‰â<80><9e>¢
是34个字符(即至少 34 个字节),并且没有任何一种编码曾经使用过这么多空间对于单个字符。 What's probably happening is multiple levels of encoding, such as HTML entities, base64, UTF-8/16/32 or escape characters like %%
to represent %
in SQL or \\
to represent \
in Bash. 手动反转所有这些级别的编码将涉及大量阅读庞大的 docx 标准。 更简单的替代方法是使用一个库,它可以为您将整个文本转换为已知的字符编码,此时您最多只需一次转换为 UTF-8。
对此的另一个论点是“撇号字符串”确实包含其他无害的字符,例如“a”和“e”。 如果至少对编码有所了解,您就不可能将编码字符与非编码字符分开,这会使生成的文本充满无效文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.