2016-08-24 20 views
1

yamlデータをMySQLのjacksonを使用して解析しようとしていますが、特殊文字があるというエラーが表示されます。私は正規表現を使用してそれを交換しようとしているジャクソンのエラー:許容できない文字 ''(0x0)特殊文字は許可されていません

<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); 

をしかし、まだなかった

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 

このような私の依存関係ファイルを見て:私はこのようなエラー何かを得ます作業。私は何をすべきか?

+0

「.replaceAll( "[\\ x00 - \\ x08 \\ x0B \\ x0C \\ x0E - \\ x20] +"」 ")" –

+0

を置き換えてみてください。データ。 –

+0

これは私のコメントのフィードバックですが、正規表現はYAMLデータと一致するのではなく、不要な制御文字を削除することに注意してください。 –

答えて

2

ASCII以外のすべての文字を00から20(スペース)までの16進数のコードと一致させたいと思うようです。

使用

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

\x00-\x20は、削除すると[^\x00-\x7f]は、非ASCII文字に一致します。必要なすべての制御文字と一致します。

+量指定子は、1回以上一致する文字チャンクを削除/置換するために、1回以上の一致と一致します。

関連する問題