【发布时间】:2016-12-31 04:58:53
【问题描述】:
我正在尝试使用 MySQL 中的 jackson 解析 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>
我正在尝试使用正则表达式替换它:
Pattern nonASCII = Pattern.compile("[^\\x00-\\x7f]");//("[^\\x00-\\x7f]");
resultContent = Normalizer.normalize(nonASCII.matcher(resultContent).replaceAll("");
ResultContentModel rc = mapper.readValue(resultContent, ResultContentModel.class);
但还是不行。我该怎么办?
【问题讨论】:
-
尝试链接另一个替换 -
.replaceAll("[\\x00-\\x08\\x0B\\x0C\\x0E-\\x20]+", "") -
它甚至无法识别yaml数据。
-
如果这是对我评论的反馈,请注意正则表达式不匹配任何 YAML 数据,而是删除不需要的控制字符。
-
@WiktorStribiżew 我在尝试链接您的正则表达式时收到此错误(com.fasterxml.jackson.databind.JsonMappingException:无法实例化类型的值 [simple type, class com.bdg.model.resultContent]来自字符串值;没有单字符串构造函数/工厂方法)
-
将两个正则表达式合并为 1:
Pattern nonASCII = Pattern.compile("[^\\x00-\\x7f]+|[\\x00-\\x08\\x0B\\x0C\\x0E-\\x20]+");