Converti codifica file di testo


15

Incontro spesso file di testo (come file di sottotitoli nella mia lingua madre, il persiano ) con problemi di codifica dei caratteri. Questi file vengono creati su Windows e salvati con una codifica inadatta (sembra essere ANSI), che sembra incomprensibile e illeggibile, in questo modo:

inserisci qui la descrizione dell'immagine

In Windows, puoi risolverlo facilmente usando Notepad ++ per convertire la codifica in UTF-8, come di seguito:

inserisci qui la descrizione dell'immagine

E il risultato leggibile corretto è così:

inserisci qui la descrizione dell'immagine

Ho cercato molto una soluzione simile su GNU / Linux, ma sfortunatamente le soluzioni suggerite (ad esempio questa domanda ) non funzionano. Soprattutto, ho visto la gente suggerire iconve recodema non ho avuto fortuna con questi strumenti. Ho testato molti comandi, inclusi i seguenti, e tutti hanno fallito:

$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt 

Nessuno di questi ha funzionato!

Sto usando Ubuntu-14.04 e sto cercando una soluzione semplice (GUI o CLI) che funzioni esattamente come Notepad ++.

Un aspetto importante dell'essere "semplice" è che l'utente non è tenuto a determinare la codifica di origine; piuttosto la codifica di origine dovrebbe essere rilevata automaticamente dallo strumento e solo la codifica di destinazione dovrebbe essere fornita dall'utente. Tuttavia, sarò anche felice di conoscere una soluzione funzionante che richiede la codifica del codice sorgente.

Se qualcuno ha bisogno di un caso di prova per esaminare diverse soluzioni, l'esempio sopra è accessibile tramite questo link .


2
Prova: vim '+set fileencoding=utf-8' '+wq' file.txt.
muru,

Il farsi dovrebbe essere, iso-639ma questo non sembra essere disponibile in nessuno dei due iconvo recode. Almeno, non lo vedo nell'output di iconv -l.
terdon,

@muru Ho testato il tuo suggerimento vimma non ha funzionato.
Seyed Mohammad,

@SeyedMohammad sembrava ancora lo stesso?
muru,

@muru Yup! Nessun cambiamento.
Seyed Mohammad,

Risposte:


12

Questi file Windows con testo persiano sono codificati in Windows-1256 . Quindi può essere decifrato con un comando simile a OP provato, ma con diversi set di caratteri. Vale a dire:

recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(denunciato sui reclami del poster originale; vedi commenti)

iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt

Questo presuppone che la variabile di ambiente LANG sia impostata su una locale UTF-8. Per convertire in qualsiasi codifica (UTF-8 o altro), indipendentemente dalla locale corrente, si può dire:

iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}

Il poster originale è anche confuso con strumenti semantici di ricodifica del testo (ricodifica, iconv). Per la codifica sorgente ( source.. o -f) è necessario specificare la codifica con cui il file viene salvato (dal programma che lo ha creato). Non alcune ipotesi (ingenue) basate su personaggi mojibake in programmi che provano (ma non riescono) a leggerlo. Cercare ISO-8859-15 o WINDOWS-1252 per un testo persiano era ovviamente un vicolo cieco: queste codifiche semplicemente non contengono alcuna lettera persiana.


@Seyed Mohammad: ora con i comandi specificati in modo esplicito.
Incnis Mrsi,

Grazie! Il secondo comando (quello che utilizza iconv) ha funzionato. Ma il primo (usando recode) non funzionava correttamente e l'output era ancora incomprensibile. Modifica la tua risposta per includere solo il iconvcomando e la contrassegnerò come risposta.
Seyed Mohammad,

1
Inoltre, per essere liberi dall'impostazione della variabile LANG, si può fare: cosa iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txtche ho testato e lavorato. Quindi potrebbe essere una buona idea modificare il comando in questo modo.
Seyed Mohammad,

Ho scritto un utile script basato sul comando funzionante che ho spiegato in un'altra risposta qui. Spero che possa aiutare altri utenti Linux persiani in quanto mi aiuta molto.
Seyed Mohammad,

@karel: Grazie, "lamentarsi" è un verbo: la frase è stata scritta in modo non schematico.
Incnis Mrsi,

1

A parte iconv, che è uno strumento molto utile da solo o in uno script, c'è una soluzione davvero semplice che ho trovato cercando di capire lo stesso problema per i set di caratteri greci (Windows-1253 + ISO-8859-7).

Tutto quello che devi fare è aprire il file di testo attraverso la finestra di dialogo "Apri" di Gedit e non facendo doppio clic su di esso . Nella parte inferiore della finestra di dialogo è presente un menu a discesa per la codifica, impostato su "Rilevato automaticamente" . Modificalo in "Windows-125x" o altro set di codici adatto e il testo sarà perfettamente leggibile in Gedit. Puoi quindi salvarlo utilizzando la codifica UTF-8, solo per essere sicuro che non avrai più lo stesso problema in futuro ...


1

Come soluzione complementare al problema, ho preparato un utile script Bash basato sul iconvcomando della risposta di Incnis Mrsi :

#!/bin/bash

if [ $# -lt 1 ]
then
   echo 'Specify at least one file to fix.'
   exit 1
fi

# Temp file to store conversion attempt(s).
tmp='tmp.fixed'

for file in "$@"
do
  # Try to fix the file encoding.
  if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
    echo "Fixed: '$file'"
    cat $tmp > "$file"
  else
    echo "Failed to fix: '$file'"
  fi
done
rm $tmp

Salvare questo script come fix-encoding.sh, concedergli l'esecuzione chmod +x fix-encoding.she utilizzarlo in questo modo:

./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub

Questo script tenterà di correggere la codifica di qualsiasi numero di file fornito come input. Si noti che i file verranno riparati sul posto, quindi i contenuti verranno sovrascritti.


Non è necessario inserire $ file da "  ...  " poiché le variabili vengono espanse tra virgolette doppie e in testo aperto. Solo '$ file' verrà reso letteralmente, con il simbolo del dollaro, da bash.
Incnis Mrsi,

Come ho accennato in risposta alla risposta pubblicata da "Incnis Mrsi", tale soluzione non ha funzionato e lo stesso vale per questa sceneggiatura.
Seyed Mohammad,

1

Non so se questo funziona con Farsi: uso Gedit, dà un errore con una codifica errata e posso scegliere ciò che voglio tradurre in UTF-8, era solo un testo non in formato illuminato, ma ecco uno screenshot !

inserisci qui la descrizione dell'immagine

Mi dispiace di aver finalmente superato i miei file di testo, quindi ora sono tutti convertiti.

Ho adorato anche Notepad ++, manca ancora.


Gedit non può risolvere il problema. Sebbene Gedit non mostri un errore di codifica per il mio file, anche quando lo fa non può risolverlo. Ho anche provato "salva con nome" con la codifica UTF-8 in Gedit, ma non risolve il problema.
Seyed Mohammad,

1

Se ti piace lavorare nella GUI anziché nella CLI, come faccio io:

  1. Apri file con Geany (editor)
  2. Vai al menu File -> Ricarica come
  3. Scegli la codifica presunta per cambiare il gibberish in caratteri identificabili nella tua lingua. Ad esempio, per leggere i sottotitoli in greco ricaricherei come europeo occidentale -> greco (Windows-1253)
  4. Vai al menu Documento > Imposta codifica -> Unicode -> UTF-8
  5. Salva

Non funziona ..
Aurimas,

0

La soluzione funzionante che ho trovato sta usando l' editor di testo di Microsoft Visual Studio Code che è Freeware e disponibile per Linux.

Apri il file in cui vuoi convertire la sua codifica in VS-Code. Nella parte inferiore della finestra ci sono alcuni pulsanti. Uno di questi è correlato alla codifica dei file, come mostrato di seguito:

inserisci qui la descrizione dell'immagine

Facendo clic su questo pulsante si apre un menu ambientale che include due elementi. Da questo menu seleziona l'opzione "Riapri con codifica", proprio come sotto:

inserisci qui la descrizione dell'immagine

Questo aprirà un altro menu che include un elenco di codifiche diverse, come mostrato di seguito. Ora seleziona "Arabo (Windows 1256)":

inserisci qui la descrizione dell'immagine

Questo risolverà il testo senza senso in questo modo:

inserisci qui la descrizione dell'immagine

Ora fai di nuovo clic sul pulsante di codifica e questa volta seleziona l'opzione "Salva con codifica", proprio come sotto:

inserisci qui la descrizione dell'immagine

E nel nuovo menu selezionare l'opzione "UTF-8":

inserisci qui la descrizione dell'immagine

Ciò salverà il file corretto usando la codifica UTF-8:

inserisci qui la descrizione dell'immagine

Fatto! :)


Ho provato "Salva con codifica" ma mostra la precedente codifica Agian, nel mio caso la sua UTF8
chaitanya,
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.