AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 547391
Accepted
Gabriel Diego
Gabriel Diego
Asked: 2019-10-18 15:56:56 +0800 CST2019-10-18 15:56:56 +0800 CST 2019-10-18 15:56:56 +0800 CST

Como usar uma string em caracteres chineses como entrada para outro comando no bash?

  • 772

Atualmente, estou usando um comando para converter alguns caracteres chineses em pinyin, o que exige que a string no meu bash seja segura para Unicode e coloque o resultado em outra variável. Eu posso executar o seguinte comando normalmente:

  chinese="你好"
  to-pinyin.py $chinese

Ele imprimirá a saída conforme o esperado, no entanto, como quero a saída em uma variável, tentei fazer o seguinte:

  chinese="你好"
  pinyin=$(to-pinyin.py $chinese)

E python falhará com:

Traceback (most recent call last):
  File "/~/to-pinyin.py", line 31, in <module>
    print pinyin.get(hanzi, delimiter=" ").capitalize()
UnicodeEncodeError: 'ascii' codec can't encode character u'\u01d0' in position 1: ordinal not in range(128)

A mesma coisa vai acontecer com backticks. Acho que vou contornar escrevendo a saída em um arquivo e em uma conversão lá, depois carregar as strings em uma variável. De que outra forma posso corrigir isso para evitar a solução alternativa?

EDITAR:

Por solicitação, aqui está a saída do locale:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

SOLUÇÃO UTILIZADA

Graças à resposta de muru e alguma ajuda desta outra resposta , adicionei .encode('utf-8')ao final das strings impressas no meu script python.

Eu gostaria de poder mudar para python3, mas não há nenhum pacote pinyin padrão e não consigo instalar nenhum bom pacote pinyin que faria meu trabalho rapidamente em python3. Lembro-me de tentar por um tempo, mas python3 continuou se recusando a importar o pacote que eu instalei, então instalei um em python2 e funcionou imediatamente.

bash
  • 1 1 respostas
  • 2023 Views

1 respostas

  • Voted
  1. Best Answer
    muru
    2019-10-18T18:58:40+08:002019-10-18T18:58:40+08:00

    Este é um problema com o Python 2print e uma razão para favorecer o manuseio consistente de Unicode do Python 3.

    Agora, por que redirecionar para um arquivo causa problemas? É porque print()em python2 é tratado especialmente. Enquanto os outros objetos semelhantes a arquivos em python sempre convertem para ASCII , a menos que você os configure de maneira diferente, usar print()to output para o terminal usará a localidade do usuário para converter antes de enviar a saída para o terminal. Quando print()não está saindo para o terminal (sendo redirecionado para um arquivo, por exemplo), print()decide que não sabe qual localidade usar para esse arquivo e, portanto, tenta converter para ASCII .

    • 4

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve