Sistema de codificación de shell

Pregunta:

Si, antes de Mx shell , ejecuto Cx RET c ( universal-coding-system-argument ), puedo cambiar el sistema de codificación utilizado por el shell. Por lo tanto, dado

echo Straße > foo 

foo se codificará en el CS relacionado.

¿Cómo puedo cambiar el sistema de codificación después de emitir Mx shell ?

De manera más general, ¿cómo puedo configurar la codificación de entrada / salida de comint?

Respuesta:

En lo que respecta a Linux, el comportamiento se puede controlar con:

(setenv "LANG" ENCODING)

antes de llamar a Mx shell y después desde el búfer de shell con:

(set-buffer-process-coding-system INPUT-ENCODING OUTPUT-ENCODING)   

Ambos deben establecerse en un valor compatible con la cadena a representar. La familia de codificación UTF-8 debería funcionar en la mayoría de los casos.

Para aprender sobre la codificación actual, podemos usar:

(getenv "LANG")
(process-coding-system (get-buffer-process (current-buffer)))

Tenga en cuenta que (setenv "LANG" ENCODING) afecta a todos los procesos creados posteriormente, que heredarán el valor LANG ; (set-buffer-process ... y (process-coding-system... son específicos del búfer, por lo que requieren que el búfer relacionado (shell) esté actualizado cuando se llame.

En la mayoría de los casos, esto debería funcionar.

M-S-: (setenv "LANG" "en_US.UTF-8") 
M-x shell
M-S-: (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix)
echo Straße > foo

Por el contrario, usar (setenv "LANG" "en_US") (sin UTF-8), imprimiría en la consola o en el archivo caracteres extraños.

Es probable que los valores adecuados (basados ​​en UTF-8) ya sean los predeterminados.

En lo que respecta a Windows, la función set-buffer-process-coding-system todavía se aplica, pero no hay una variable LANG en Windows. Windows representa las codificaciones en términos de números de página de códigos . Las páginas de códigos a menudo están asociadas a varios idiomas, por ejemplo, la mayoría de los idiomas occidentales (aunque no el inglés de EE. UU.) Se codifican a través de la página de códigos 850. Para obtener información sobre la página de códigos del sistema, consulte la clave de registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP

Cuando en la configuración de idioma cambia el idioma de entrada predeterminado de Windows , es posible que termine cambiando este valor, por ejemplo, cambiar de inglés de EE. UU. A Reino Unido cambia el valor de OEMCP de 437 a 859. Puede cambiar manualmente este valor y hay una página de códigos equivalente a UTF -8, eso es 65001. Si bien 65001 (UTF-8) podría ser el estándar en el futuro (como ya lo es para Linux), dados los cambios relevantes, puede romper algunas aplicaciones no Unicode con CP 65001. Afortunadamente, es Es posible configurar fácilmente la página de códigos en el símbolo del sistema de Windows, en lugar de en todo el sistema, con el comando chcp (cambiar la página de códigos). Bajo la perspectiva de Emacs, esto se reduce a:

M-x shell
chcp 65001
dir 
type foo.txt

En la práctica, suponiendo que tenga una Windows en inglés, el comando dir y type deberían poder mostrar correctamente los nombres de archivo y el contenido del archivo, respectivamente, en ruso o chino.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım