¿Cómo mostrar Unicode UTF-8 como Unicode?


12

Tengo algunos archivos de texto con codificación UTF-8 que muestran extraños códigos de escape en Emacs. Por ejemplo, este texto:

En ista quaestione primo exponam quid intelligendum est per hoc nomen 'Deus'; secundo, responbo ad quaestionem.

Shows como este en Emacs:

ingrese la descripción de la imagen aquí

Esto solo sucede en Emacs. Otros editores muestran el texto correctamente. ¿Como puedo solucionar este problema?


Actualización 1

Si llamo revert-buffer-with-coding-systemy selecciono utf-8el archivo, léelo correctamente. Entonces, como Gilles ha adivinado correctamente, Emacs no está detectando la codificación del archivo. Si agrego el código ; -*- coding: utf-8 -*-al archivo, Emacs se abre y lo muestra correctamente.


Actualización 2

Volví a codificar el archivo en "UTF-8 con codificación BOM", y ahora se muestra bien en Emacs. No sé cuál es la diferencia entre los dos tipos, pero Emacs parece conocer solo el BOMed.


Emacs no reconoce el archivo como UTF-8. ¿Cuál es el contenido de su archivo de inicio? ¿Qué versión de Emacs estás ejecutando? ¿Cambia algo si comienzas Emacs con emacs -qo emacs -Q?
Gilles 'SO- deja de ser malvado'

No tengo ningún problema con otros archivos UTF-8. Estoy ejecutando GNU Emacs 24.4.4. No hay diferencia con emacs -qo emacs -Q.
NVaughan

Ah, si funciona con otros archivos y en una configuración impecable, entonces la razón probablemente sea que el archivo también contiene UTF-8 no válido en alguna parte. Déjame ver cómo contar con Emacs ...
Gilles 'SO- deja de ser malvado'

Respuestas:


10

Por alguna razón, Emacs no reconoce el archivo como UTF-8. Puede forzar a Emacs a volver a abrir el archivo como UTF-8 ejecutando el comando C-x RET r( revert-buffer-with-coding-system) e ingresando utf-8.

La razón por la cual Emacs no reconoció este archivo como UTF-8 (pero reconoce otro) es probable que contenga alguna secuencia UTF-8 no válida. Esta secuencia seguirá apareciendo como barra invertida seguida de tres dígitos octales con un color diferente (la escape-glyphcara) después de reinterpretar el archivo como UTF-8. Puede buscar dicha secuencia ejecutando C-M-s( isearch-regexp) y buscando

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

donde ^@se ingresa escribiendo C-q C-SPC(es el carácter ^ @ = 0, no la secuencia de dos caracteres circumflex-at; el carácter anterior es el carácter circunflejo).

Puede forzar Emacs para reconocer el archivo como UTF-8 mediante la adición de una variable de archivo de sistema de codificación : algo Dicho así -*-coding: utf-8-*-en la primera línea, o poner algo como esto cerca del final del archivo (se puede sustituir #por cualquier prefijo, pero Local Variables:y la End:necesidad aparecer exactamente así con los dos puntos finales):

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

Emacs elige la codificación según la cual los archivos se interpretan en función de varias configuraciones, principalmente entornos de lenguaje y las variables auto-coding-alisty auto-coding-regexp-alist. Dado que tiene el mismo problema con este archivo incluso cuando se ejecuta emacs -Q, creo que esto no es un problema con esa configuración, sino con el contenido del archivo.


Si abro el archivo sin la variable de archivo de sistema de codificación (es decir, cuando el archivo se muestra sin ella) y ejecutar la búsqueda de expresiones regulares, todos los de mi \342, \200, \230, etc. ser seleccionado. Pero si lo abro "correctamente" (usando la variable de codificación), entonces no aparecen resultados de búsqueda.
NVaughan

@NVaughan Hmmm. Entonces no entiendo por qué este archivo no se reconoce como UTF-8 cuando otros lo son (especialmente debajo emacs -Q).
Gilles 'SO- deja de ser malvado'

1

Es tarde para responder la pregunta sobre la lista de materiales, pero lo haré de todos modos.

La marca de orden de bytes (BOM) es una secuencia de tres bytes \ xef \ xbb \ xbf que, al comienzo de un archivo, indica a los sistemas y aplicaciones que los contenidos están codificados como UTF-8. Correctamente son metadatos, no tratados como parte de los contenidos.

La mayoría de las aplicaciones, Emacs es una de ellas, honra la lista de materiales y escribe todos los archivos UTF-8 con ella. Otras aplicaciones pueden honrarlo en la lectura, pero no escribirlo; y otros no lo saben y pueden lanzar un mensaje de error cuando lo encuentran. En otras palabras, la situación es desordenada. Prefiero usarlo siempre que sea posible.


-1

Solo para sistemas similares a UNIX.

En muchos casos, la definición de codificación sencilla en ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

logrado con

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

en ~ / .profile debería resolver su problema.

PD: Después de estas correcciones, debe RELOGINARSE en su sesión para permitir que los cambios se hagan visibles.


Aunque lo que dices puede ser útil, esto no parece responder a esta pregunta, ya que el problema era solo con algunos archivos utf-8.
JeanPierre

Suponga que después de la estricta definición de codificación en los archivos de configuración, este problema podría desaparecer para todos los archivos y terminar para siempre :-)
Alioth
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.