在尝试将从 pdf 文件中提取的数据发布到亚马逊云搜索域进行索引时,由于数据中的字符无效,索引失败。
如何在发布到搜索端点之前删除这些无效字符?
我尝试转义和替换字符,但没有奏效。
在尝试将从 pdf 文件中提取的数据发布到亚马逊云搜索域进行索引时,由于数据中的字符无效,索引失败。
如何在发布到搜索端点之前删除这些无效字符?
我尝试转义和替换字符,但没有奏效。
将文档上传到 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]/
我已使用此处提供的解决方案解决了问题
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)