2010-01-10 15 views
13

Używam Gina Trapiani's excellent todo.sh do organizowania mojej listy zadań.Jak zmienić kodowanie znaków skryptów powłoki?

Jednak będąc psem, byłoby miło, gdyby skrypt przyjął specjalne duńskie znaki, takie jak & oslash; i æ.

Jestem absolutnym UNIX-n00b, więc byłaby to wielka pomoc, gdyby ktoś mógł mi powiedzieć, jak to naprawić! :)

+0

Mam powodzeniem używany 'todo.sh' ze znaków rozszerzonych w systemie Mac OS X .. Która platforma używasz? – smokris

Odpowiedz

14

Co robi ta komenda show?

locale 

Należy pokazać coś takiego dla Ciebie:

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= 

Jeśli nie, możesz spróbować zrobić to przed uruchomieniem skryptu:

LANG=da_DK.UTF-8 

nie mówisz co dzieje się po uruchomieniu skryptu i napotyka te znaki. Czy są w pliku todo? Czy wpisano je w odpowiedzi? Czy jest komunikat o błędzie? Czy coś wypływa zamiast oczekiwanego wyniku?

Spróbuj i zobacz co dostaniesz:

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

działa LANG = da_DK.UTF-8 działa! wielkie dzięki! :) – timkl

13

Powoli, świat uniksowy przechodzi z ASCII i innych regionalnych kodowań do UTF-8. Musisz uruchomić terminal UTF, na przykład nowoczesny xterm lub kit.

W swoim ~/.bash_profile ustaw język jako jeden z wariantów UTF-8.

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

Powinieneś wtedy móc pisać znaki UTF-8 w terminalu i dołączać je do skryptów bash.

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

Zobacz także: https://serverfault.com/questions/11015/utf-8-and-shell-scripts

+1

W TTY (nie xterm) terminal może nie być w stanie UTF-8, dopóki nie uruchomi się 'unicode_start'. (Nie jest to powiązane z obsługą ustawień regionalnych i powłoki/aplikacji.) Niektóre dystrybucje umożliwiają to podczas uruchamiania, ale niektóre nie. – ephemient

+0

Nie ma związku z pytaniem OP, ale publikuje tylko dla zapisu. Naprawiono problem, który wystąpił podczas debugowania skryptu w Pythonie za pomocą ipdb. Wracał '*** UnicodeEncodeError: kodek 'ascii' nie może kodować znaku '\ u22f1' na pozycji 314: porządkowy nie w zakresie (12)' przy każdej próbie wydrukowania zmiennej. Próbowałem ustawić 'LANG = en_US.UTF-8', ale tylko ustawiając opcję' export LANG = C.UTF-8', która działała. – Yamaneko

Powiązane problemy