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?
23
piconv
cambiar la codificación;)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).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.
fuente
Un programa llamado
file
puede hacer esto. Ejemplo:Si está interesado en cómo se hace, vea
src/encoding.c
.fuente
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 yfile
demostré que es ungzip
archivo comprimido!