杰克逊错误:不可接受的字符''(0x0)不允许特殊字符
问题描述:
我想从MySQL解析使用杰克逊的yaml数据,但我得到错误说有一个特殊字符。我得到的错误是这样的:杰克逊错误:不可接受的字符''(0x0)不允许特殊字符
com.fasterxml.jackson.databind.JsonMappingException: special characters are not allowed
[Source: [email protected]; line: 13, column: 68] (through reference chain: com.app.ResultContentModel["opinion"])
...
Caused by: com.fasterxml.jackson.dataformat.yaml.snakeyaml.error.YAMLException: special characters are not allowed
at [Source: [email protected]; line: 13, column: 68]
...
Caused by: unacceptable character '' (0x0) special characters are not allowed
in "'reader'", position 1027
我的依赖文件是这样的:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.8.1</version>
</dependency>
我想使用正则表达式来替代它:
Pattern nonASCII = Pattern.compile("[^\\x00-\\x7f]");//("[^\\x00-\\x7f]");
resultContent = Normalizer.normalize(nonASCII.matcher(resultContent).replaceAll("");
ResultContentModel rc = mapper.readValue(resultContent, ResultContentModel.class);
但还是没工作。我该怎么办?
答
看来你想匹配任何非ASCII +所有字符与从00
至20
(空间)的十六进制代码。
使用
Pattern nonASCII = Pattern.compile("[^\\x00-\\x7f]+|[\\x00-\\x20]+");
的\x00-\x20
将匹配您需要删除所有的控制字符和[^\x00-\x7f]
将匹配非ASCII字符。
+
量词将匹配1个或多个匹配项,以删除/替换一次匹配的字符块。
尝试链接另一个替换 - '.replaceAll(“[\\ x00 - \\ x08 \\ x0B \\ x0C \\ x0E - \\ x20] +”,“”)' –
它甚至未能识别yaml数据。 –
如果这是对我的评论的反馈,请注意,正则表达式不匹配任何YAML数据,而是删除不需要的控制字符。 –