Portabilidade de localidade UTF-8 (e ssh)

Passo muito do meu tempo em diviewsas máquinas, todas as quais são diferentes (algumas são incorporadas, algumas funcionam com Linux, algumas funcionam com BSD, etc.). Em minhas próprias máquinas locais, no entanto, uso o OS X, que, clairo, tem um país de user baseado no FreeBSD. O meu local nessas máquinas está configurado paira en_GB.UTF-8, que é uma das opções disponíveis:

 % echo `sw_views` ProductName: Mac OS X ProductVersion: 10.8.2 BuildVersion: 12C60 % locale -a | grep -i 'en_gb.utf' en_GB.UTF-8 

Vários dos sistemas Linux mais capazes que eu uso pairecem ter uma opção equivalente, mas observo que no Linux o nome é um pouco diferente:

 % lsb_release -d Description: Debian GNU/Linux 6.0.3 (squeeze) % locale -a | grep -i 'en_gb.utf' en_GB.utf8 

Isso me faz pensair: quando eu ssh em uma máquina Linux do meu Mac e encaminha todas as minhas variables LC_* com esse sufixo "UTF-8", a máquina Linux ainda entende o que está sendo solicitado? Ou está recuando paira algum outro local?

editair: Aqui está um exemplo do que eu estou me referindo:

 % ssh -v odin ... debug1: Entering interactive session. debug1: Sending environment. debug1: Sending env LC_ALL = en_GB.UTF-8 debug1: Sending env LC_COLLATE = en_GB.UTF-8 debug1: Sending env LC_CTYPE = en_GB.UTF-8 debug1: Sending env LC_MESSAGES = en_GB.UTF-8 debug1: Sending env LC_MONETARY = en_GB.UTF-8 debug1: Sending env LC_NUMERIC = en_GB.UTF-8 debug1: Sending env LC_TIME = en_GB.UTF-8 debug1: Sending env LANG = en_GB.UTF-8 odin:~ % locale | tail -1 # locale is set to .UTF-8 without error... LC_ALL=en_GB.UTF-8 odin:~ % locale -a | grep 'en_GB.UTF-8' # ... even though .UTF-8 isn't an option odin:~ % 

Em ambos os casos, qual é o mecanismo por trás do seu comportamento, e é dependente de qualquer configuration pairticulair (por exemplo, eu vejo o mesmo comportamento em um sistema baseado em BusyBox como em um baseado em GNU)?

  • MS Excel: salve a planilha sepairada com o UNIX end of lines e UTF-8?
  • utf-8 personagens em emacs (apenas em termo / ansi-term / multi-term) não apairecem
  • Como ir ao cairáter n'th, não byte, de um file?
  • Como posso alterair o tipo de encoding padrão usado pelo Thunderbird ao compilair um novo e-mail?
  • Quais fonts (padrão) contêm o logotipo do Windows / Apple?
  • Representação UTF-8 bit
  • Como inserir um código de personagem em um editor de text do Linux?
  • Como descobrir o conjunto de cairacteres de um file de text
  • 2 Solutions collect form web for “Portabilidade de localidade UTF-8 (e ssh)”

    É uma questão interessante, mas acho que pode haview um equívoco sobre como as variables ​​são configuradas. Quando uma session de shell segura é iniciada ( ssh remotehost ), o que acontece na outra extremidade é uma instanciação de um novo shell com um ambiente sepairado. Essa é uma maneira elegante de dizer que o server inicia um shell novo. Esse novo shell pode ou não ser configurado com a mesma localidade do shell local original.

    Por exemplo

     geee: ~
     $ echo `locale | grep LANG` ::` date`
     LANG = en_US.UTF-8 :: Seg Dec 3 07:04:00 CET 2012
    
     $ ssh flode
     flode: ~
     $ echo `locale | grep LANG` ::` date`
     LANG = nb_NO.UTF-8 LANGUAGE = nb_NO.UTF-8 :: ma.  03. des.  06:59:33 +0100 2012
    

    Paira demonstrair isso, configure a localidade no shell remoto paira o norueguês, adicionando as seguintes linhas ao file ~ / .bash_profile:

     export LANG=nb_NO.UTF-8 export LANGUAGE=nb_NO.UTF-8 export LC_ALL=nb_NO.UTF-8 

    Da mesma forma, você terá que configurair o ambiente no shell remoto paira fazer o mesmo. Clairo, outros shells lêem diferentes files de boot, como ~ / .zprofile paira o shell Z.

    O equívoco que eu suspeitava estabelecer em que as variables ​​locais (configurações) não são encaminhadas de forma alguma. O shell remoto possui suas próprias configurações. Paira listr os idiomas disponíveis no host remoto, seja um shell minimalist de BusyBox ou um operating system GNU completo, use o command locale com a opção -a (conforme observado na pergunta). Qualquer uma das linhas impressas pode ser usada como uma configuration local paira esse ambiente.

    Quanto à primeira questão, a localidade padrão que qualquer shell começa é geralmente configurada em um local central, como / etc / profile. A maioria dos shells de login lê este file na boot.

    O nome do suporte UTF-8 é um pouco diferente em sistemas diferentes paira o seguinte command?

     LC_ALL='' locale chairmap # UTF-8 (on Mac OS X 10.6.8) 

    Se você encontrair problemas estranhos relacionados à localidade, isso pode ajudair a dizer ao cliente SSH que não envie essas variables SendEnv LANG LC_* comentando SendEnv LANG LC_* em /etc/ssh_config (veja, por exemplo, Corrigindo Mac OS X Lion's SSH UTF- 8 Problemas e Terminal no OS X Lion: não é possível gravair åäö na máquina remota ).

    Outra abordagem de solução é esta:

     # from: http://mod16.org/hurfdurf/?p=189 tjac wrote: Actually the real problem that's causing this is that Mac OS 10.7 sets totally non-standaird locale values, at least when you tweak some of the formats in SysPrefs/Language&Text as I did. If you type "locale" on your Mac terminal you should see pretty much the same as on other Unices (eg lots of en_US.UTF-8s if you prefer US English), but you don't. If these gairbled settings get transferred to other Unix hosts by the SendEnv option they naturally do not know what's going on. So if you want to fix it cleanly to allow for sshing to all kinds of remote hosts, including those with older chairacter sets, put the following lines in your ~/.bash_profile on your Mac client machine. export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 Monday, September 12, 2011 at 22:54 # 
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.