2011-09-02 30 views
9

Necesito convertir un archivo ISO-8859-1 de codificación UTF-8, sin perder intormations de contenido ...Convertir ISO-8859-1 a UTF-8 utilizando maravilloso

tengo un archivo que se parece esto:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld> 

No quiero codificarlo en UTF-8. me trataron siguiente:

f=new File('c:/temp/myiso88591.xml').getText('ISO-8859-1') 
ts=new String(f.getBytes("UTF-8"), "UTF-8") 
g=new File('c:/temp/myutf8.xml').write(ts) 

no funcionó debido a incompatibilidades de Cuerda. luego leí algo sobre bytestreamreaders/escritores/streamingmarkupbuilder y otra ...

Luego probé

f=new File('c:/temp/myiso88591.xml').getText('ISO-8859-1') 
mb = new groovy.xml.StreamingMarkupBuilder() 
mb.encoding = "UTF-8" 

new OutputStreamWriter(new FileOutputStream('c:/temp/myutf8.xml'),'utf-8') << mb.bind { 
    mkp.xmlDeclaration() 
    out << f 
} 

esta totalmente no era que lo que quería ..

sólo quiero conseguir el contenido de una lectura xml con un lector ISO-8859-1 y luego ponerlo en un nuevo archivo (antiguo) ... por qué es tan complicado: -/

El resultado debería ser, y el archivo debería ser realmente codificado en utf-8:

<?xml version="1.0" encoding="UTF-8" ?> 
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld> 

Gracias por cualquier respuesta Saludos

+1

no tengo la primera idea acerca maravilloso, pero supongo que si se especifica la codificación del archivo de 'File.getText', se convierte de esa codificación a su codificación interna automáticamente. Es decir. probablemente no necesite hacer nada más, siempre que su codificación interna esté configurada para usar UTF-8. Alguien me corrige si estoy fuera de la pista aquí. Alternativamente, ¿cuáles son los errores exactos que obtienes? – deceze

Respuesta

12
def f=new File('c:/data/myiso88591.xml').getText('ISO-8859-1') 
new File('c:/data/myutf8.xml').write(f,'utf-8') 

(yo sólo decidimos probarlo, funciona :-)

mismo que en java: las bibliotecas hacer la conversión para usted. .. como deceze dijo: cuando especifica una codificación, se convertirá a un formato interno (utf-16 afaik). Cuando especifica otra codificación cuando escribe la cadena, se convertirá a esta codificación.

Pero si trabajas con XML, no deberías tener que preocuparte por la codificación de todos modos porque el analizador XML se encargará de ello. Leerá los primeros caracteres <?xml y determinará la codificación básica de esos caracteres. Después de eso, puede leer la información de codificación de su encabezado xml y usar esto.

+1

' bzlm

+0

Algunas codificaciones UTF inician el archivo con una lista de materiales. Y en algunas codificaciones como ebcdic, los caracteres ' rdmueller

+2

Lo siento pero no está bien, realmente funciona. Se almacena de esta manera: ' öääüÃÃà Test !!!' y la codificación que se muestra todavía es ISO-8859-1 (usando notepad ++) Tal vez la primera línea obliga al editor a mostrarlo como ... ahh ok este fue el caso, omg, ya lo intenté de esta manera con tanta frecuencia ... pero nunca se dio cuenta de que los datos estaban codificados en utf 8 pero mostrados como ansi ... muchas gracias. – Booyeoo

8

Haciéndolo un poco más Groovy, y no requiriendo que todo el archivo quepa en la memoria, puede usar los lectores y escritores para transmitir el archivo. Esta fue mi solución cuando tenía archivos demasiado grandes para Unix iconv(1).

new FileOutputStream('out.txt').withWriter('UTF-8') { writer -> 
    new FileInputStream('in.txt').withReader('ISO-8859-1') { reader -> 
     writer << reader 
    } 
} 
+0

Solución muy genial. Me gusta la forma en que usas el withReader/Writer. Lo probé yo mismo y funcionó muy bien :) –

Cuestiones relacionadas