--- title: "无效的Unicode字符代码是代理代码——如何解决此Elasticsearch异常" date: 2026-01-06 lastmod: 2026-01-06 description: "当Elasticsearch遇到无效的Unicode字符或代理代码时会出现此错误。本文介绍如何通过清理输入数据、使用try-catch处理或配置忽略畸形字符来解决这个问题。" tags: ["Unicode", "字符编码", "索引错误", "数据验证", "解析异常"] summary: " 版本: 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); } " --- > **版本:** 7.13-8.9 简而言之,当Elasticsearch遇到无效的Unicode字符或代理代码时,会出现此错误。代理代码在Unicode中用于表示无法直接表示的字符。这种情况可能在索引包含此类字符的文档时发生。要解决此问题,可以对输入数据进行清理,删除或替换这些无效字符。另外,可以使用try-catch块来处理错误,在索引过程中跳过有问题的文档。最后,可以配置Elasticsearch在索引过程中忽略畸形字符。 日志上下文 ----------- 日志"Invalid unicode character code; [{}] is a surrogate code"的类名是[AbstractBuilder.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从Elasticsearch源代码中提取了以下内容,供寻求深入背景的人员参考: ```java 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); } ```