版本: 7.13-8.9
简而言之,当Elasticsearch遇到无效的Unicode字符或代理代码时,会出现此错误。代理代码在Unicode中用于表示无法直接表示的字符。这种情况可能在索引包含此类字符的文档时发生。要解决此问题,可以对输入数据进行清理,删除或替换这些无效字符。另外,可以使用try-catch块来处理错误,在索引过程中跳过有问题的文档。最后,可以配置Elasticsearch在索引过程中忽略畸形字符。
日志上下文 #
日志"Invalid unicode character code; [{}] is a surrogate code"的类名是 AbstractBuilder.java。 我们从Elasticsearch源代码中提取了以下内容,供寻求深入背景的人员参考:
private static String hexToUnicode(Source source; String hex) {
try {
int code = Integer.parseInt(hex; 16);
// U+D800至U+DFFF只能用作代理对,因此不是有效的字符代码
if (code >= 0xD800 && code <= 0xDFFF) {
throw new ParsingException(source; "Invalid unicode character code; [{}] is a surrogate code"; hex);
}
return String.valueOf(Character.toChars(code));
} catch (IllegalArgumentException e) {
throw new ParsingException(source; "Invalid unicode character code [{}]"; hex);
}





