Come visualizzare Unicode UTF-8 come Unicode?


12

Ho alcuni file di testo con codifica UTF-8 che mostrano strani codici di escape in Emacs. Ad esempio, questo testo:

In ista quaestione primo exponam quid intelligendum est per hoc nomen 'Deus'; secondo, respondebo ad quaestionem.

Spettacoli come questo in Emacs:

inserisci qui la descrizione dell'immagine

Questo succede solo in Emacs. Altri editor mostrano il testo correttamente. Come posso risolvere questo problema?


Aggiornamento 1

Se chiamo revert-buffer-with-coding-systeme seleziono utf-8il file, leggo correttamente. Quindi, come Gilles ha correttamente indovinato, Emacs non rileva la codifica dei file. Se aggiungo il codice ; -*- coding: utf-8 -*-al file, Emacs si apre e lo visualizza correttamente.


Aggiornamento 2

Ho ricodificato il file in "UTF-8 con codifica BOM" e ora viene visualizzato correttamente in Emacs. Non so quale sia la differenza tra i due tipi, ma Emacs sembra essere consapevole solo di quello BOMed.


Emacs non riconosce il file come UTF-8. Qual è il contenuto del tuo file init? Quale versione di Emacs stai eseguendo? Cambia qualcosa se avvii Emacs con emacs -qo emacs -Q?
Gilles 'SO-smetti di essere malvagio' il

Non ho problemi con altri file UTF-8. Sto eseguendo GNU Emacs 24.4.4. Nessuna differenza con emacs -qo emacs -Q.
NVaughan,

Ah, se funziona con altri file e in una configurazione incontaminata, probabilmente la ragione è che il file contiene anche UTF-8 non valido da qualche parte. Fammi vedere come dire con Emacs ...
Gilles 'SO- smetti di essere malvagio' il

Risposte:


10

Per qualche motivo, Emacs non riconosce il file come UTF-8. Puoi forzare Emacs a riaprire il file come UTF-8 eseguendo il comando C-x RET r( revert-buffer-with-coding-system) e digitando utf-8.

Il motivo per cui Emacs non ha riconosciuto questo file come UTF-8 (ma ne riconosce altri) è probabile che contenga una sequenza UTF-8 non valida. Questa sequenza apparirà comunque come una barra rovesciata seguita da tre cifre ottali con un colore diverso (la escape-glyphfaccia) dopo aver reinterpretato il file come UTF-8. Puoi cercare una tale sequenza eseguendo C-M-s( isearch-regexp) e cercando

[^^@-~[:multibyte:]]

dove ^@viene inserito digitando C-q C-SPC(è il carattere ^ @ = 0, non la sequenza di due caratteri circonflesso-at; il carattere prima di esso è il carattere circonflesso).

Puoi forzare Emacs a riconoscere il file come UTF-8 aggiungendo una variabile di file di sistema di codifica : metti qualcosa di simile -*-coding: utf-8-*-sulla prima riga o metti qualcosa di simile vicino alla fine del file (puoi sostituirlo #con qualsiasi prefisso, ma Local Variables:e End:deve apparire esattamente così con i due punti finali):

# Local Variables:
# coding: utf-8
# End:

Emacs sceglie la codifica in base alla quale i file vengono interpretati in base a diverse impostazioni, principalmente gli ambienti linguistici e le variabili auto-coding-aliste auto-coding-regexp-alist. Dato che hai lo stesso problema con questo file anche durante l'esecuzione emacs -Q, penso che questo non sia un problema con quelle impostazioni, ma con il contenuto del file.


Se apro il file senza la variabile di file di sistema di codifica (vale a dire quando i display di file erroneamente) ed eseguire la ricerca regex, tutta la mia \342, \200, \230, ecc vengono selezionati. Ma se lo apro "correttamente" (usando la variabile di codifica), allora non compaiono risultati di ricerca.
NVaughan,

@NVaughan Hmmm. Quindi non capisco perché questo file non sia riconosciuto come UTF-8 quando altri sono (specialmente sotto emacs -Q).
Gilles 'SO- smetti di essere cattivo' il

1

È tardi per rispondere alla domanda sulla DBA, ma lo farò comunque.

Il segno di ordine dei byte (BOM) è una sequenza di tre byte \ xef \ xbb \ xbf che, all'inizio di un file, indica a sistemi e applicazioni che il contenuto è codificato come UTF-8. Correttamente sono metadati, non trattati come parte del contenuto.

La maggior parte delle applicazioni - Emacs è una di queste - onora la DBA e scrive tutti i file UTF-8. Altre applicazioni possono onorarlo nella lettura, ma non scriverlo; e altri non lo sanno e potrebbero generare un messaggio di errore quando lo incontrano. In altre parole, la situazione è disordinata. Preferisco usarlo dove possibile.


-1

Solo per sistemi simili a UNIX.

In molti casi la semplice definizione di codifica in ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

realizzato con

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

in ~ / .profile dovrebbe risolvere il tuo problema.

PS Dopo queste correzioni devi RELOGIN nella tua sessione per rendere visibili le modifiche.


Anche se ciò che dici può essere utile, questo non sembra rispondere a questa domanda, poiché il problema era solo con alcuni file utf-8.
JeanPierre,

Supponiamo che dopo la rigorosa definizione della codifica nei file di configurazione questo problema potrebbe scomparire per tutti i file che finiscono per sempre :-)
Alioth
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.