Caracteres especiales en Oracle NCLOB
Estoy tratando con una base de datos Oracle 10g y se proporciona el siguiente procedimiento almacenado:
procedure get_synopsis (
p_id in my_schema.products.p_id%type,
p_synopses out sys_refcursor); -- cursor of - synopsis_type, synopsis_text
En mi código Java preparo la declaración de esta manera:
String idForDb = fromIdUrlToIdDb(prodIdUrl);
statement.registerOutParameter(1, OracleTypes.VARCHAR);
statement.setString(1, idForDb );
statement.registerOutParameter(2, OracleTypes.CURSOR);
Y obtengo los datos que necesito de esta manera:
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();
}
// ...
}
}
}
El campo SYNOPSIS_TEXT es unNCLOB pero uso una cadena para su contenido, ya que estoy seguro de que no será más larga que MAX_INTEGER. Los "Nel conjunto de caracteres nacional "utilizado esUnicode.
En el JSON generado a partir de esa cadena puedo ver caracteres manejados correctamente comocoma, guión, guión, comilla simple, punto, paréntesis, colon, etc. pero tengo problemas con caracteres especiales comocomilla simple izquierda / U + 2018 (‘’), que no se muestra correctamente. También puedo ver en el textonuevos caracteres de línea (\ n) ycitas (\ ").
¿Es correcto devolver un texto en ese formato a los consumidores o debería manejarlo mejor / de manera diferente?