Emacs me está pidiendo un sistema de codificación en cada guardado

7

Consolidé muchos archivos de texto (win, mac, unix) en un solo archivo orgmode. Para algunos personajes estaba viendo números en lugar de los caracteres correctos. Cosas como \ 314 \ 203.

Usé "revert-buffer-with-coding-sytem" y elegí utf-8-hfs-unix. Eso lo arregla.

Pero ahora cada vez que guardo, Emacs me pide que elija un sistema de codificación. Si elijo el texto sin formato, deja de preguntar, pero cuando vuelvo a abrir el archivo, los números vuelven.

¿Cómo puedo solucionar esto?

Jason Mirk
fuente
1
¿Qué tal agregar -*- coding: utf-8-hfs-unix;-*-en la primera línea de su archivo? ( gnu.org/software/emacs/manual/html_node/emacs/… )
JeanPierre
Esto funcionó parcialmente. No más números. El problema es que cuando guardo Emacs me pide nuevamente un sistema de codificación. Solo si elijo el texto sin formato puedo guardarlo sin que me lo pregunte siempre.
Jason Mirk
2
¿Podría ser que su archivo contenga caracteres de múltiples conjuntos de caracteres incompatibles?
JeanPierre
Creo que sí, pero ¿cómo lo soluciono?
Jason Mirk
1
Tuve problemas los primeros días usando Emacs (hace unos años), pero adopté el enfoque en el siguiente enlace y nunca he mirado atrás: ¿cómo restablecer emacs para guardar archivos en la codificación de caracteres utf-8-unix? - stackoverflow.com/a/20736147/2112489 Es similar a la respuesta anterior de Elethen, pero tiene algunas cosas que agregué hace unos años. Sin embargo, todavía hay algunos caracteres especiales que activan una solicitud. Como es tan raro que encuentro esos caracteres (generalmente cuando edito un archivo después del reconocimiento óptico de caracteres), nunca pasé más tiempo en el tema.
ley

Respuestas:

6

Esto me sucedió por un tiempo también antes de tener una idea de lo que estaba sucediendo, aquí hay un ejemplo de cómo puede suceder algo como esto (si es importante, estoy en Windows, en caso de que sea algo específico de esta compilación) -

Digamos que tiene un archivo que está codificado en UTF-8, y pega un texto de un sitio web que está codificado con la página de códigos Latin-1 o Windows-1252, por ejemplo, una O con una diéresis o comillas rizadas.

Ahora tiene una secuencia de caracteres codificados con UTF-8 seguida de algo que no tiene sentido para UTF-8 o que posiblemente será malinterpretado. Si no puede interpretarlo como una secuencia UTF-8 correcta, lo mostrará como el valor bruto, por ejemplo, octal \ 326 (que es una O con una diéresis en la página de códigos Latin-1). Esto se debe a que para UTF-8, se supone que el \ 326 en particular va seguido de algo con un 10 en los dos bits más altos, y si no es así, no sabe qué hacer con él.

Por ejemplo, si fuera a https://www.gnu.org/software/emacs/manual/html_node/emacs/Intro.html#Intro y copie algún texto que incluya comillas rizadas, como "La 'G' en GNU" y pegarlo en un búfer codificado UTF-8, terminaría con "The \ 221G \ 222 en GNU".

¿Entonces lo que hay que hacer?

Por un lado, puede mirar el búfer con diferentes sistemas de codificación para ver si mostrará esos caracteres correctamente, por ejemplo, Windows-1252 y Latin-1 son bastante comunes:

M-x revert-buffer-with-coding-system windows-1252 RET
M-x revert-buffer-with-coding-system latin-1 RET

Si el documento se ve mejor de esta manera, puede guardarlo con esta nueva codificación. Sin embargo, hay muchos sistemas de codificación diferentes.

Para volver a ponerlo en UTF-8, solo haz

M-x revert-buffer-with-coding-system utf-8 RET

En cuanto a por qué sucede esto, no estoy seguro: parece que Emacs sabría cómo algo estaba codificado en el portapapeles y lo traduciría en consecuencia, pero no parece hacer esto.

Para obtener más explicaciones, consulte /programming/1543613/how-does-utf-8-variable-width-encoding-work y http://kunststube.net/encoding/ .

Brian Burns
fuente
1
Lo abrí con Visual Studio Code y lo leyó perfectamente. Guardado, abierto en emacs. ¡Todo se ve bien ahora!
Jason Mirk
@JasonMirk Interesante: ¿tal vez adivinó qué sistema de codificación usar para cualquier personaje extraño, por ejemplo, Latin-1, y los tradujo a UTF-8?
Brian Burns
Creo que sí. Todo es buen hombre. Saul Goodman.
Jason Mirk
Esta no es la solución, pero ayudó junto con los comentarios de @JeanPierre. La idea es leer el archivo con la codificación deseada (Alt + x revert-buffer-with-coding-system) y luego buscar caracteres que no sean ASCII para filtrar aquellos que permanecen inválidos (Mx search-forward-regex [[: nonascii:]] RET).
emagar