Come modificare la codifica da testo ASCII esteso non ISO, con terminatori di linea CRLF in UTF-8?


21

Ho un file 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

E ci sono alcuni caratteri che sono codificati in modo errato:

trwa³y, sta³y, usuwaæ

Come posso modificare la codifica di questo file in UTF-8? Finora ho provato il seguente modo:

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

Forse dovrei in qualche modo usare extended ASCII( high ASCII) ma non riesco a trovarlo iconvnell'elenco di codifica.


2
puoi caricare il file da qualche parte?
Janos

C'è un pratico elenco di codifiche ISO a 8 bit, tutte mostrate fianco a fianco, qui . Qualcuno di loro sembra vicino a ciò che osservi nel tuo file? Ad esempio, se pensi che "sta³y" dovrebbe essere "stacy", trova quale codifica ha una "c" per qualunque sia lo strano codice esadecimale in quella parola.
Giovanni 1024

Probabilmente il 90% delle volte, "testo ASCII esteso non ISO" sarà un file codificato nella tabella codici di Windows 1252 . "È probabilmente la codifica dei caratteri a 8 bit più utilizzata al mondo." (Wikipedia). Prova prima:iconv -f windows-1252 -t utf-8 file
nyov

Risposte:


33

file ti dice "Testo ASCII esteso non ISO" perché rileva che questo è:

  • molto probabilmente un file di "testo" dalla mancanza di caratteri di controllo (valori byte 0–31) diversi dalle interruzioni di riga;
  • “Extended-ASCII” perché ci sono caratteri al di fuori dell'intervallo ASCII (valori di byte ≥128);
  • "Non ISO" perché ci sono caratteri nell'intervallo 128–159 ( ISO 8859 riserva questo intervallo per i caratteri di controllo).

Bisogna capire quale codifica il file sembra essere in. Si può provare Enca riconoscimento automatico 's. Potrebbe essere necessario spostarlo nella giusta direzione dicendogli in quale lingua è il testo.

enca x.txt
enca -L polish x.txt

Per convertire il file, passa l' -xopzione:enca -L polish x.txt -x utf8 >x.utf8.txt

Se non puoi o non vuoi usare Enca, puoi indovinare la codifica manualmente. Un po 'di guardarmi intorno mi ha detto che questo è un testo polacco e che le parole sono trwały, stały, usuważ, quindi stiamo cercando una traduzione in cui ³łe æż. Questo appare come latin-2 o latino-10 o più probabilmente (dato “non-ISO” CP1250 , che si sta visualizzando come latin1 . Per convertire il file in UTF-8, è possibile utilizzare recode o iconv .

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

Non partecipo a < x.txt > x.utf8.txtPerché usiamo <e quindi >? Come funziona?
Filip Bartuzi,


1

Apri il file di testo con gedit e nella finestra di dialogo "Salva come .." vedrai la codifica corrente.


0

Hai provato a scoprire quale codifica esatta è x.txt? Otterrai un elenco di codifiche supportate con

iconv --list

A volte mi capita di avere una discrepanza tra latin1 e utf8. Quindi spesso aiuta a convertirlo da e verso utf8 e viceversa.


0

Ho creato uno script di conversione automatizzato utilizzando la libreria enca , lo uso sul mio NAS per convertire i sottotitoli in UTF-8 ma potrebbe essere utilizzato per qualsiasi conversione automatizzata

Sentiti libero di usare :)

MODIFICARE:

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.