【问题标题】:Jackson error : unacceptable character '' (0x0) special characters are not allowedJackson 错误:不可接受的字符 '' (0x0) 不允许使用特殊字符
【发布时间】: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]+");

标签: java regex jackson yaml


【解决方案1】:

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

使用

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

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

+ 量词会匹配 1 次或多次出现,从而一次性移除/替换匹配的字符块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多