leer java xml oracle encoding

java - leer - ¿Cómo codificar caracteres de Oracle a XML?



select xml oracle (3)

¿Qué versión de JRE estás ejecutando? Sax Project dice:

J2SE 1.4 agrupa una versión anterior de SAX2. ¿Cómo puedo hacer que SAX2 r2 o posterior esté disponible?

En mi entorno aquí utilizo Java para serializar el conjunto de resultados a XML. Sucede básicamente así:

//foreach column of each row xmlHandler.startElement(uri, lname, "column", attributes); String chars = rs.getString(i); xmlHandler.characters(chars.toCharArray(), 0, chars.length()); xmlHandler.endElement(uri, lname, "column");

El XML se ve así en Firefox:

<row num="69004"> <column num="1">10069</column> <column num="2">sd&#26;</column> <column num="3">FCVolume </column> </row>

Pero cuando analizo el XML obtengo el a

org.xml.sax.SAXParseException: la referencia de caracteres " & # 26 " es un carácter XML no válido.

Mi pregunta ahora es: ¿qué caracteres tengo que reemplazar o cómo tengo que codificar mis caracteres, que serán XML válidos?


Encontré una lista interesante en la Especificación Xml : según esa Lista, desaconseja usar el Personaje # 26 (Hex: # x1A ).

Los caracteres definidos en los siguientes rangos también se desalientan. Son caracteres de control o caracteres Unicode permanentemente indefinidos

Vea los rangos completos .

Este código reemplaza todos los Xml Utf8 no válidos de una Cadena:

public String stripNonValidXMLCharacters(String in) { StringBuffer out = new StringBuffer(); // Used to hold the output. char current; // Used to reference the current character. if (in == null || ("".equals(in))) return ""; // vacancy test. for (int i = 0; i < in.length(); i++) { current = in.charAt(i); if ((current == 0x9) || (current == 0xA) || (current == 0xD) || ((current >= 0x20) && (current <= 0xD7FF)) || ((current >= 0xE000) && (current <= 0xFFFD)) || ((current >= 0x10000) && (current <= 0x10FFFF))) out.append(current); } return out.toString(); }

se toma de Caracteres XML no válidos: cuando UTF8 válido no significa XML válido

Pero con eso tuve el problema de compacidad de UTF-8 aún:

org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence

Después de leer XML, devolviendo XML como UTF-8 desde un servlet , probé lo que sucede si configuro Contenttype así:

response.setContentType("text/xml;charset=utf-8");

Y funcionó ....


Extensible Markup Language (XML) 1.0 dice:

El carácter ampersand (&) y el paréntesis angular izquierdo (<) no deben aparecer en su forma literal, excepto cuando se utilizan como delimitadores de marcado, o dentro de un comentario, una instrucción de procesamiento o una sección CDATA. Si se necesitan en otro lugar, deben escaparse usando referencias de caracteres numéricos o las cadenas "&" y "<", respectivamente. El corchete de ángulo recto (>) se puede representar con la cadena ">", y debe, por compatibilidad, escaparse usando ">" o una referencia de carácter cuando aparezca en la cadena "]]>" en el contenido, cuando eso cadena no está marcando el final de una sección CDATA.

Puede omitir la codificación si usa CDATA:

<column num="1"><![CDATA[10069]]></column> <column num="2"><![CDATA[sd&]]></column>