Oracle NCLOB中的特殊字符

我正在处理Oracle 10g数据库,并提供以下存储过程:

procedure get_synopsis ( p_id in my_schema.products.p_id%type, p_synopses out sys_refcursor); -- cursor of - synopsis_type, synopsis_text 

在我的Java代码中,我以这种方式准备语句:

 String idForDb = fromIdUrlToIdDb(prodIdUrl); statement.registerOutParameter(1, OracleTypes.VARCHAR); statement.setString(1, idForDb ); statement.registerOutParameter(2, OracleTypes.CURSOR); 

我以这种方式得到了我需要的数据:

 String defaultSyn, nonDefSyn; String returnedId = ((OracleCallableStatement)stm).getString(1); try ( ResultSet synopses = ((OracleCallableStatement)stm).getCursor(2) ){ // p_synopses - cursor of: synopsis_type, synopsis_text while( synopses!=null && synopses.next() ){ String type = synopses.getString(1) != null ? synopses.getString(1).toUpperCase() : null; if( type != null ){ StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader( synopses.getClob(2).getCharacterStream() ); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } if("DEFAULT".equals(type)){ defaultSyn = sb.toString(); }else if("NONDEFAULT".equals(type)){ nonDefSyn = sb.toString(); } // ... } } } 

SYNOPSIS_TEXT字段是NCLOB,但我使用字符串作为其内容,因为我确信它不会超过MAX_INTEGER。 使用的“ N ational字符集”是Unicode

在从该字符串生成的JSON中,我可以看到正确处理的字符,如逗号,爆炸,破折号,单引号,点,括号,冒号等,但我有特殊字符的问题, 如左单引号 / U + 2018(”) ,没有正确显示。 我还可以在文本中看到换行符 (\ n)和引号 (\“)。

将这种格式的文本返回给消费者是否正确,还是应该更好/不同地处理?