Tuve algunos problemas con los archivos de subtítulos en el video omxplayer. Para resolverlo tuve que convertir de Windows-1250 a la codificación UTF-8. Mi pregunta es, ¿cómo puedo ver para algún archivo específico qué codificación se utiliza?
Tuve algunos problemas con los archivos de subtítulos en el video omxplayer. Para resolverlo tuve que convertir de Windows-1250 a la codificación UTF-8. Mi pregunta es, ¿cómo puedo ver para algún archivo específico qué codificación se utiliza?
Respuestas:
Realmente no puede averiguar automáticamente si un archivo se escribió originalmente con codificación X.
Sin embargo, lo que puede hacer fácilmente es verificar si el archivo completo se puede decodificar con éxito de alguna manera (pero no necesariamente correctamente) utilizando un códec específico. Si encuentra bytes que no son válidos para una codificación dada, debe ser otra cosa.
El problema es que muchos códecs son similares y tienen los mismos "patrones de bytes válidos", simplemente interpretándolos como caracteres diferentes. Por ejemplo, una ä
codificación en una podría corresponder a é
otra o ø
a una tercera. La computadora realmente no puede detectar qué forma de interpretar el byte da como resultado un texto legible por humanos (a menos que tal vez si agrega un diccionario para todo tipo de idiomas y le permite realizar correcciones ortográficas ...). También debe saber que algunos conjuntos de caracteres son en realidad subconjuntos de otros, como, por ejemplo, la codificación ASCII es parte de los códecs más utilizados, como algunos de la familia ANSI o UTF-8. Eso significa, por ejemplo, un texto guardado como UTF-8 que solo contiene caracteres latinos simples, sería idéntico al mismo archivo guardado como ASCII.
Sin embargo, volvamos de explicar lo que no puede hacer a lo que realmente puede hacer:
Para una verificación básica de los archivos de texto ASCII / no ASCII (normalmente UTF-8), puede usar el file
comando. Sin embargo, no conoce muchos códecs y solo examina los primeros kB de un archivo, suponiendo que el resto no contendrá ningún carácter nuevo. Por otro lado, también reconoce otros tipos de archivos comunes como varios scripts, documentos HTML / XML y muchos formatos de datos binarios (que no son interesantes para comparar archivos de texto) y puede imprimir información adicional si hay líneas extremadamente largas o qué Se utiliza el tipo de secuencia de nueva línea (por ejemplo, UNIX: LF, Windows: CR + LF).
$ cat ascii.txt
I am an ASCII file.
Just text and numb3rs and simple punctuation...
$ cat utf8.txt
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!
$ file ascii.txt utf8.txt
ascii.txt: ASCII text
utf8.txt: UTF-8 Unicode text
Si eso no es suficiente, puedo ofrecerle el script de Python que escribí para esta respuesta aquí , que escanea archivos completos e intenta decodificarlos usando un conjunto de caracteres específico. Si tiene éxito, esa codificación es un candidato potencial. De lo contrario, si hay bytes que no pueden decodificarse con él, puede eliminar ese conjunto de caracteres de su lista.
Un programa llamado file
puede hacer esto. Ejemplo:
$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators
Si está interesado en cómo se hace, vea src/encoding.c
.
file
hace una suposición, y con frecuencia no es muy buena. Por ejemplo, en mis pruebas, identificó erróneamente tanto MacRoman como CP-1252 como ISO-8859, con el resultado de que "š" y "ß" estaban codificados.
.sql
archivo anterior y file
demostré que es un gzip
archivo comprimido!
piconv
cambiar la codificación;)