Pregunta

Incluso si el asunto objeto parece complicado, el problema es bastante simple.

se crea un archivo XML con la siguiente secuencia de comandos:

def xmlFile = new File("file-${System.currentTimeMillis()}.xml")
mb = new groovy.xml.StreamingMarkupBuilder()
mb.encoding = "UTF-8"
new FileWriter(xmlFile) << mb.bind {
    mkp.xmlDeclaration()
    out << "\n"
    someMarkup {}
}

A continuación, cuando analizo este archivo usando un código como:

def xml = new XmlSlurper().parse(xmlFile)

Me dio la siguiente excepción MalformedByteSequenceException:

  

excepción lanzada: bytes no válida 2 de   3-byte UTF-8 secuencia

Y si puedo convertir el archivo en formato UTF-8 (utilizando Notepad ++ por ejemplo), entonces todo está bien.

Entonces, ¿qué puedo hacer para salvar mi archivo en formato UTF-8? ¿Por qué la mb.encoding = "UTF-8" código no lo hace?

Thx

¿Fue útil?

Solución

Es necesario para envolver un escritor flujo de salida en torno a un FileOutputStream es UTF-8 no es el juego de caracteres por defecto

new OutputStreamWriter(new FileOutputStream(exportXmlFile),'utf-8') << mb.bind {
    mkp.xmlDeclaration()
    out << "\n"
    someMarkup {}
}

No estoy seguro de qué configuración hace mb.encoding, probablemente sólo define el juego de caracteres en la cabecera XML

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top