2012-04-16 26 views
5

Intentar utilizar el curl de linux para descargar un archivo xml de una url.curl de linux guardar como utf-8

bastante seguro de que el XML está codificado en UTF-8,

sospechar rizo -o duerma guardar como UTF-8.

¿Hay alguna forma de forzar guardar en UTF-8 con curl?


Gracias por la sugerencia, lo que descubrí:

Debido a que la alimentación XML es dinámica, no todo el tiempo que contienen caracteres UTF-8. A veces no tiene el carácter utf-8 en todo el contenido, a pesar de que está configurado como utf-8 en el tipo de contenido de encabezado y codificación xml: charset = utf-8. Cuando contiene un carácter utf-8 como mínimo, se guardará como utf-8.

Cuando esto sucede, curl no se descarga como utf-8, lo que tiene sentido ya que no hay caracteres utf-8, ¿por qué hay una necesidad de almacenar como utf-8.

Esto es muy complicado, algún validador tiene que ser válido contra utf-8, por lo tanto, todavía necesito una solución para forzarlo a utf8 porque de manera predeterminada todos mis xml shld están en codificación utf8.

intenté lo sugerido usando iconv f iso8859-1 utf-8 no funciona para este caso ya que sospecho que tampoco está en iso8859-1.

Todavía necesitamos una mejor solución.

+0

no creo 'curl' hace ninguna modificación en absoluto a lo que se obtiene, y desde luego no vuelve a codificar el texto. – geoffspear

+0

hola gracias ... sin embargo, no estoy buscando volver a codificar los datos, solo me pregunto por qué no está guardando como utf-8, mientras que los contenidos son alr utf-8 – flyclassic

+0

¿Qué te hace pensar que no está guardando como utf-8? ¿Qué estás realmente tratando de lograr? – geoffspear

Respuesta

7

curl no realiza ninguna conversión del archivo que descarga. Si el servidor HTTP le sirve el XML en otra codificación (p. Ej., ISO8859-1), su curl también lo guardará en el disco.

Para solucionar el problema, puede utilizar "iconv" de la siguiente manera:

curl URL | iconv -f iso8859-1 -t utf-8 > output.xml 

Esperanza esta ayuda.

+0

lo he intentado de esta manera, pero todavía se descarga no descargado como utf-8. Estoy bastante seguro de que los contenidos xml están en utf-8 ya que lo he desarrollado y comprobado con mb_check_encoding, devuelve verdadero con utf-8. ¿Cómo puedo verificar el estándar de codificación de archivos en Linux? No estoy seguro si resulta ser iso8859-1 por eso iconv no funciona? el archivo -bi no funciona para mí ... – flyclassic

+0

Puede verificar la codificación de un archivo escribiendo 'file FILENAME'. Por favor, publique la salida de 'archivo' (contra el XML descargado con curl, sin iconv) aquí. – user1202136

+0

Si está en un mac, no quiere depender de iconv, y no quiere codificar las suposiciones sobre la codificación de texto entrante, puede obtener el mismo efecto con 'curl URL | textutil -cat txt -stdin -stdout -encoding utf-8' – algal

1

¿Ha intentado agregar el encabezado Aceptar-Caracteres? Tuve un problema similar al descargar un archivo que estaba descargando con la codificación incorrecta. Cuando me puse la cabecera Accept-Charset funciona:

curl -H "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" URL | iconv -f iso8859-1 -t utf-8 > output.xml