2016-08-24 326 views
1

我想从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); 

但还是没工作。我该怎么办?

+0

尝试链接另一个替换 - '.replaceAll(“[\\ x00 - \\ x08 \\ x0B \\ x0C \\ x0E - \\ x20] +”,“”)' –

+0

它甚至未能识别yaml数据。 –

+0

如果这是对我的评论的反馈,请注意,正则表达式不匹配任何YAML数据,而是删除不需要的控制字符。 –

回答

2

看来你想匹配任何非ASCII +所有字符与从0020(空间)的十六进制代码。

使用

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

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

+量词将匹配1个或多个匹配项,以删除/替换一次匹配的字符块。

相关问题