Pregunta

Estoy de procesamiento de algunos de los archivos de datos que se supone que para ser válida UTF-8 pero no lo son, que hace que el analizador (no bajo mi control) a fallar.Me gustaría añadir una etapa de pre-validación de los datos para UTF-8 y la correcta forma, pero todavía no he encontrado una utilidad para ayudar a hacer esto.

Hay un servicio web en el W3C, que parece estar muerta, y me he encontrado sólo para Windows validación herramienta que los informes no válido archivos UTF-8 pero no se informe de que las líneas o los caracteres a revisión.

Yo sería feliz con una herramienta que puede caer en el uso y (idealmente de la cruz-plataforma), o un rubí/script en perl que puedo hacer parte de mi proceso de carga de datos.

¿Fue útil?

Solución

Usted puede utilizar GNU iconv:

$ iconv -f UTF-8 your_file -o /dev/null; echo $?

O con versiones anteriores de iconv, como en macOS:

$ iconv -f UTF-8 your_file > /dev/null; echo $?

El comando devolverá 0 si el archivo puede ser convertido con éxito, y 1 si no.Además, se imprimirá el desplazamiento de byte donde se produjo la secuencia de bytes no válida.

Editar:La codificación de salida no tiene que ser especifica, se supone que para ser UTF-8.

Otros consejos

El uso de python y str.codificar|decodificar funciones.

>>> a="γεια"
>>> a
'\xce\xb3\xce\xb5\xce\xb9\xce\xb1'
>>> b='\xce\xb3\xce\xb5\xce\xb9\xff\xb1' # note second-to-last char changed
>>> print b.decode("utf_8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.5/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 6: unexpected code byte

La excepción tiene la información solicitada en su .los argumentos de la propiedad.

>>> try: print b.decode("utf_8")
... except UnicodeDecodeError, exc: pass
...
>>> exc
UnicodeDecodeError('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')
>>> exc.args
('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')

Puede utilizar isutf8 a partir de la moreutils de la colección.

$ apt-get install moreutils
$ isutf8 your_file

En un script de shell, el uso de la --quiet interruptor y comprobar el estado de salida, que es cero para los archivos que son válidos utf-8.

Cómo acerca de la gnu iconv la biblioteca?El uso de la función iconv ():"Una secuencia multibyte inválida se encuentra en la entrada.En este caso se establece errno a EILSEQ y devuelve (size_t)(-1).*inbuf está apuntando a la izquierda al principio de la secuencia multibyte inválida."

EDITAR:oh - me perdí la parte donde desea un lenguaje de secuencias de comandos.Pero para el comando de la línea de trabajo, la iconv la utilidad debe validar para usted también.

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