Codifiche di caratteri supportate da more, cat e less


18

Ho un file di testo codificato come segue secondo file:

Testo ISO-8859, con terminatori di linea CRLF

Questo file contiene il testo francese con accenti. La mia shell è in grado di mostrare l'accento e emacsin modalità console è in grado di visualizzare correttamente questi accenti.

Il mio problema è che more, cate lessgli strumenti non vengono visualizzati correttamente questo file. Immagino che ciò significhi che questi strumenti non supportano questo set di codifica di caratteri. È vero? Quali sono le codifiche dei caratteri supportate da questi strumenti?

Risposte:


17

La tua shell può mostrare accenti ecc. Perché probabilmente sta usando UTF-8. Dal momento che il file in questione ha una codifica diversa, less moree catsta provando a leggerlo come UTF e fallisce. Puoi controllare la tua codifica corrente con

echo $LANG

Sono disponibili due opzioni, è possibile modificare la codifica predefinita o modificare il file in UTF-8. Per modificare la codifica, apri un terminale e digita

export LANG="fr_FR.ISO-8859"

Per esempio:

$ echo $LANG 
en_US.UTF-8
$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ export LANG="fr_FR.ISO-8859"
$ xterm <-- open a new terminal 
$ cat foo.txt 
J'ai mal à la tête, c'est chiant!

Se si utilizza gnome-terminalo simili, potrebbe essere necessario attivare la codifica, ad esempio facendo terminatorclic con il tasto destro e:

inserisci qui la descrizione dell'immagine

Per gnome-terminal:

inserisci qui la descrizione dell'immagine

L'altra opzione (migliore) è quella di modificare la codifica del file:

$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ iconv -f ISO-8859-1 -t UTF-8  foo.txt > bar.txt
$ cat bar.txt 
J'ai mal à la tête, c'est chiant!

4

Le codifiche dei caratteri ISO-8858 sono un po 'obsolete per i sistemi Linux. È probabile che l'intero sistema Linux utilizzi UTF-8 fino in fondo. Compreso l'emulatore di terminale e la shell.

Tuttavia. cat, grepE lessnon fare alcuna trasformazione codifica, tratteranno la vostra ISO-8859 file / latin1 come UTF-8, che non funziona.

Se emacs è in grado di visualizzarli, è perché tenta di rilevare automaticamente la codifica utilizzata e apparentemente riesce. Di 'a emacs di salvare il file come UTF-8 e sarai in grado di usare cat/ grep/ qualunque cosa su di esso.

Se conosci l'esatta codifica dei caratteri (ISO-8859 è una raccolta di questi, devi conoscere quello esatto: ISO-8859-1 o ISO-8859-15 o peggio), puoi anche convertire i tuoi file dalla riga di comando :

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8

2

Cat, More e Less stanno solo facendo il loro lavoro di visualizzazione del file. La traduzione tra codifiche non è nella descrizione del loro lavoro. La codifica di newline non è un problema poiché CRLF viene visualizzato proprio come la normale linea che termina LF, ma il tuo terminale probabilmente si aspetta testo codificato UTF-8, che è lo standard di fatto al giorno d'oggi.

Luit si traduce tra codifiche supportate e UTF-8. Puoi dire a Luit quale codifica tradurre impostando la LC_CTYPEvariabile di ambiente o con l' -encodingopzione. Ad esempio, per visualizzare un file latino-1 (aka ISO 8859-1):

LC_CTYPE=en_US luit less somefile
luit -encoding ISO8859-1 less somefile

Se il file ha una codifica esotica che Luit non supporta, è possibile reindirizzarlo tramite un programma di traduzione. Iconv supporta molte codifiche.

iconv -f latin1 somefile
iconv -f latin1 somefile | less
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.