2010-01-10 7 views
13

J'utilise Gina Trapiani's excellent todo.sh pour organiser ma liste de tâches. Cependant, étant un danois, il serait bien que le script accepte des caractères spéciaux danois comme & oslash; et æ.Comment modifier un encodage de caractères de scripts shell?

Je suis un absolu UNIX-n00b, donc ce serait une aide précieuse si quelqu'un pouvait me dire comment résoudre ce problème! :)

+0

Je l'ai utilisé avec succès 'todo.sh' avec des caractères étendus sous Mac OS X .. Quelle plateforme utilisez-vous? – smokris

Répondre

14

Qu'est-ce que ce spectacle de commande?

locale 

Il devrait montrer quelque chose comme ça pour vous:

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= 

Sinon, vous pouvez essayer de le faire avant d'exécuter votre script:

LANG=da_DK.UTF-8 

Vous ne dites pas ce que se produit lorsque vous exécutez le script et qu'il rencontre ces caractères. Sont-ils dans le fichier todo? Sont-ils entrés à une invite? Y a-t-il un message d'erreur? Est-ce que quelque chose produit à la place de la sortie attendue?

Essayez et voir ce que vous obtenez:

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

en cours d'exécution LANG = da_DK.UTF-8 fonctionne! Merci beaucoup! :) – timkl

13

Lentement, le monde Unix passe de l'ASCII et d'autres codages régionaux à l'UTF-8. Vous devez exécuter un terminal UTF, tel qu'un xterm ou un putty moderne.

Dans votre ~/.bash_profile, votre langue est l'une des variantes UTF-8. Vous devriez alors pouvoir écrire des caractères UTF-8 dans le terminal, et les inclure dans les scripts bash.

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

Voir aussi: https://serverfault.com/questions/11015/utf-8-and-shell-scripts

+1

Sur un TTY (pas xterm), le terminal n'est peut-être pas compatible avec UTF-8 tant que 'unicode_start' n'est pas exécuté. (Ceci n'est pas lié aux paramètres régionaux et à la prise en charge de shell/application.) Certaines distributions permettent cela au démarrage, mais d'autres non. – ephemient

+0

Sans rapport avec la question de l'OP, mais juste pour l'enregistrement. Cela a corrigé le problème que j'avais lors du débogage d'un script Python avec ipdb. Il retournait '*** UnicodeEncodeError: le codec 'ascii' ne peut pas encoder le caractère '\ u22f1' en position 314: ordinal pas dans la plage (12)' chaque fois que j'ai essayé d'imprimer une variable. J'ai essayé de mettre 'LANG = en_US.UTF-8', mais seulement en réglant' export LANG = C.UTF-8' qui a fonctionné. – Yamaneko

Questions connexes