2

在尝试将从 pdf 文件中提取的数据发布到亚马逊云搜索域进行索引时,由于数据中的字符无效,索引失败。

如何在发布到搜索端点之前删除这些无效字符?

我尝试转义和替换字符,但没有奏效。

4

2 回答 2

1

将文档上传到 CloudSearch(使用 aws sdk / json)时,我遇到了这样的错误:

字段 content_stemmed 的源错误:字段“content_stemmed”的验证错误:代码点 B 无效

正如 AWS 所记录的(见下文),我的解决方案是在上传之前从文档中删除无效字符:

例如,这是我使用 javascript 所做的:

const cleaned = someFieldValue.replace(
  /[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]/g, 
  ''
)

参考

JSON 和 XML 批处理都只能包含在 XML 中有效的 UTF-8 字符。有效字符是控制字符制表符 (0009)、回车符 (000D) 和换行符 (000A),以及 Unicode 和 ISO/IEC 10646 的合法字符。FFFE、FFFF 和代理块 D800–DBFF 和 DC00– DFFF 无效,会导致错误。

您可以使用以下正则表达式匹配无效字符,以便将其删除:/[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]/

于 2020-02-13T23:28:08.973 回答
0

我已使用此处提供的解决方案解决了问题

RE_XML_ILLEGAL = u'([\u0000-\u0008\u000b-\u000c\u000e-\u001f\ufffe-\uffff])' + \
                 u'|' + \
                 u'([%s-%s][^%s-%s])|([^%s-%s][%s-%s])|([%s-%s]$)|(^[%s-%s])' % \
                  (unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
                   unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
                   unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff))
x = u"<foo>text\u001a</foo>"
x = re.sub(RE_XML_ILLEGAL, "?", x)
于 2013-01-11T05:57:11.810 回答