¿Cómo cambiar la codificación de texto ASCII extendido no ISO, con terminadores de línea CRLF a UTF-8?


21

Tengo un archivo txt:

$ file -i x.txt
x.txt: text/plain; charset=unknown-8bit
$ file x.txt 
x.txt: Non-ISO extended-ASCII text, with CRLF line terminators

Y hay algunos caracteres que están codificados incorrectamente:

trwa³y, sta³y, usuwaæ

¿Cómo puedo cambiar la codificación de este archivo a UTF-8? He intentado lo siguiente hasta ahora:

$ iconv -f ASCII -t UTF-8 x.txt
                puiconv: illegal input sequence at position 4

Tal vez debería usar de alguna manera extended ASCII( high ASCII) pero no puedo encontrarlo en iconvla lista de codificación.


2
¿Puedes subir el archivo a alguna parte?
janos

Hay una lista útil de codificaciones ISO de 8 bits, todas mostradas una al lado de la otra, aquí . ¿Alguno de ellos se parece mucho a lo que observa en su archivo? Por ejemplo, si cree que "sta³y" debería ser "stacy", busque qué codificación tiene una "c" para cualquier código hexadecimal extraño en esa palabra.
John1024

Probablemente el 90% del tiempo, el "texto ASCII extendido no ISO" será un archivo codificado en la página de códigos de Windows 1252 . "Es probablemente la codificación de caracteres de 8 bits más utilizada en el mundo". (Wikipedia) Pruébelo primero:iconv -f windows-1252 -t utf-8 file
nyov

Respuestas:


33

file le dice "Texto ASCII extendido no ISO" porque detecta que esto es:

  • lo más probable es que sea un archivo de "texto" por la falta de caracteres de control (valores de bytes 0–31) que no sean saltos de línea;
  • "ASCII extendido" porque hay caracteres fuera del rango ASCII (valores de bytes ≥128);
  • "No ISO" porque hay caracteres en el rango de 128-159 ( ISO 8859 reserva este rango para los caracteres de control).

Debe averiguar en qué codificación parece estar este archivo. Puede probar el reconocimiento automático de Enca . Es posible que deba empujarlo en la dirección correcta diciéndole en qué idioma está el texto.

enca x.txt
enca -L polish x.txt

Para convertir el archivo, pase el -x opción:enca -L polish x.txt -x utf8 >x.utf8.txt

Si no puede o no quiere usar Enca, puede adivinar la codificación manualmente. Un poco de mirar a mi alrededor me dijo que este es un texto polaco y que las palabras son trwały, stały, usuważ, por lo que estamos buscando una traducción donde ³ły æż. Esto parece latino-2 o latino-10 o más probable (dado el CP1250 “no ISO” que está viendo como latino1 . Para convertir el archivo a UTF-8, puede usar recode o iconv .

recode CP1250..utf8 <x.txt >x.utf8.txt
iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt

No entiendo < x.txt > x.utf8.txt¿Por qué usamos <y luego >? ¿Como funciona?
Filip Bartuzi


1

Abra el archivo de texto con gedit y en el cuadro de diálogo "Guardar como ..." verá la codificación actual.


0

¿Intentaste averiguar qué codificación exacta es x.txt? Obtendrá una lista de codificaciones compatibles con

iconv --list

A veces me sucede que tengo una falta de coincidencia entre latin1 y utf8. Luego, a menudo ayuda convertirlo y volverlo a utf8 y viceversa.


0

He creado un script de conversión automatizado usando el enca biblioteca , lo uso en mi NAS para convertir subtítulos a UTF-8, pero podría utilizarse para cualquier conversión automatizada

Siéntase libre de usar :)

EDITAR:

#!/bin/bash
LANGUAGE=czech
TO=utf8
CONVERT="enca -L $LANGUAGE -x $TO"

# Find and onvert
find ./ -type f -name "*.srt" | while read fn; do
  IS_TARGET=`enca "${fn}" | egrep -ow -m 1 'UTF-8|Unrecognized|KOI8-CS2|7bit ASCII|UCS-2|Macintosh Central European'`

    if [ "$IS_TARGET" != "UTF-8" ] &&
       [ "$IS_TARGET" != "UCS-2" ] &&
       [ "$IS_TARGET" != "Macintosh Central European" ] &&
       [ "$IS_TARGET" != "Unrecognized" ] &&
       [ "$IS_TARGET" != "7bit ASCII" ] &&
       [ "$IS_TARGET" != "KOI8-CS2" ]; then

        echo "${fn} ---- Will be converted!"
    # optional backup of original srt
        # cp "${fn}" "${fn}.bak"
        $CONVERT "${fn}"
    fi  

done
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.