2010-01-10 18 views
13

Estoy usando Gina Trapiani's excellent todo.sh para organizar mi lista de tareas pendientes.¿Cómo cambio una codificación de caracteres de scripts de shell?

Sin embargo, ser un danés, sería bueno si el guión aceptara caracteres especiales daneses como & oslash; y æ.

Soy un absoluto UNIX-n00b, por lo que sería de gran ayuda si alguien pudiera decirme cómo solucionarlo. :)

+0

he utilizado con éxito 'todo.sh' con caracteres extendidos en Mac OS X .. ¿Qué plataforma está usando? – smokris

Respuesta

14

¿Qué muestra de comandos?

locale 

Se debería mostrar algo como esto para usted:

LC_CTYPE="da_DK.UTF-8" 
LC_NUMERIC="da_DK.UTF-8" 
LC_TIME="da_DK.UTF-8" 
LC_COLLATE="da_DK.UTF-8" 
LC_MONETARY="da_DK.UTF-8" 
LC_MESSAGES="da_DK.UTF-8" 
LC_PAPER="da_DK.UTF-8" 
LC_NAME="da_DK.UTF-8" 
LC_ADDRESS="da_DK.UTF-8" 
LC_TELEPHONE="da_DK.UTF-8" 
LC_MEASUREMENT="da_DK.UTF-8" 
LC_IDENTIFICATION="da_DK.UTF-8" 
LC_ALL= 

Si no es así, es posible que trate de hacer esto antes de ejecutar la secuencia de comandos:

LANG=da_DK.UTF-8 

Usted no dice lo sucede cuando ejecuta el script y encuentra estos caracteres. ¿Están en el archivo todo? ¿Están ingresados ​​en un aviso? ¿Hay un mensaje de error? ¿Hay algo de salida en lugar de la salida esperada?

probar esto y ver lo que se obtiene:

read -p "Enter some characters" string 
echo "$string" 
+0

corriendo LANG = da_DK.UTF-8 funciona! ¡muchas gracias! :) – timkl

13

Lentamente, el mundo de Unix se está moviendo desde ASCII y otras codificaciones regionales a UTF-8. Necesita ejecutar un terminal UTF, como un xterm moderno o masilla.

En su ~/.bash_profile configure su idioma como una de las variantes UTF-8.

export LANG=C.UTF-8 
or 
export LANG=en_AU.UTF-8 
etc.. 

A continuación, debería ser capaz de escribir caracteres UTF-8 en el terminal, e incluirlos en las secuencias de comandos bash.

#!/bin/bash 
echo "UTF-8 is græat ☺" 

Consulte también: https://serverfault.com/questions/11015/utf-8-and-shell-scripts

+1

En un TTY (no en un xterm), es posible que el terminal no sea compatible con UTF-8 hasta que se ejecute 'unicode_start'. (Esto no está relacionado con el soporte de locale y shell/application.) Algunas distribuciones lo habilitan en el arranque, pero otras no. – ephemient

+0

No relacionado con la pregunta de OP, pero publicado solo para el registro. Esto solucionó el problema que tuve al depurar una secuencia de comandos de Python con ipdb. Devolvía '*** UnicodeEncodeError: 'ascii' codec no puede codificar el carácter '\ u22f1' en la posición 314: ordinal no en el rango (12)' cada vez que intenté imprimir una variable. Intenté establecer 'LANG = en_US.UTF-8', pero solo estableciendo' export LANG = C.UTF-8' que funcionó. – Yamaneko

Cuestiones relacionadas