杰克逊错误:不允许使用不可接受的字符 (0x0) 特殊字符



我试图从MySQL使用杰克逊解析yaml数据,但我得到错误说有一个特殊字符。我得到这样的错误:

com.fasterxml.jackson.databind.JsonMappingException: special characters are not allowed 
[Source: java.io.StringReader@5528a42c; 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: java.io.StringReader@5528a42c; 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>

我正在尝试使用regex:

替换它
Pattern nonASCII = Pattern.compile("[^\x00-\x7f]");//("[^\x00-\x7f]");
resultContent = Normalizer.normalize(nonASCII.matcher(resultContent).replaceAll("");
ResultContentModel rc = mapper.readValue(resultContent, ResultContentModel.class);

但仍然不起作用。我该怎么办?

似乎您想要匹配任何非ascii +所有字符与十六进制代码从0020(空格)。

使用

Pattern nonASCII = Pattern.compile("[^\x00-\x7f]+|[\x00-\x20]+");

x00-x20将匹配您需要删除的所有控制字符,[^x00-x7f]将匹配非ascii字符。

+量词将匹配一次或多次出现,以便一次删除/替换匹配的字符块

最新更新