Como imprimir caracteres Unicode em Python?


115

Quero fazer um dicionário onde palavras em inglês apontem para traduções em russo e francês.

Como faço para imprimir caracteres Unicode em Python? Além disso, como você armazena caracteres Unicode em uma variável?



Dê uma olhada aqui . Prefixar suas strings com upermite que o python as considere como strings literais Unicode.
— SRI

Respostas:


109

Para incluir caracteres Unicode em seu código-fonte Python, você pode usar caracteres de escape Unicode na forma \u0123de sua string e prefixar a string literal com 'u'.

Aqui está um exemplo em execução no console interativo Python:

>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Россия

Strings declaradas assim são variáveis ​​do tipo Unicode, conforme descrito na documentação do Python Unicode .

Se a execução do comando acima não exibir o texto corretamente para você, talvez seu terminal não seja capaz de exibir caracteres Unicode.

Para obter informações sobre como ler dados Unicode de um arquivo, consulte esta resposta:

Leitura de caracteres de arquivo em Python


4
Sim, você pode escrever seu código em arquivos de texto codificados em Unicode, mas muitos editores e ferramentas têm problemas para lidar com eles. Minha experiência com o trabalho com código-fonte em várias plataformas diferentes é que é melhor manter o código-fonte em ASCII e usar escapes Unicode.
— Matt Ryall

3
@MattRyall, eu concordo, mas uma equipe de desenvolvedores russos pode querer escrever comentários e docstrings em russo. Para um projeto de linguagem é uma boa opção.
— Johan Lundberg

3
No entanto, observe que isso só funciona se você imprimir apenas a string. Se estiver envolto em algum outro objeto, você verá códigos de escape. Tente "imprimir [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']" por exemplo.
— btubbs

3
E se eu o armazenasse em uma string mystr? então como imprimir isso?
— cqcn1991

1
@CarloWood A melhor resposta diz exatamente o que você deseja. Justprint your_unicode_characters.encode('utf-8')
— Yuhao Zhang

48

Imprima um caractere Unicode em Python:

Imprima um caractere Unicode diretamente do interpretador Python:

el@apollo:~$ python
Python 2.7.3
>>> print u'\u2713'
✓

O caractere Unicode u'\u2713'é uma marca de seleção. O intérprete imprime a marca de seleção na tela.

Imprima um caractere Unicode de um script Python:

Coloque isso em test.py:

#!/usr/bin/python
print("here is your checkmark: " + u'\u2713');

Execute assim:

el@apollo:~$ python test.py
here is your checkmark: ✓

Se não houver uma marca de seleção para você, o problema pode estar em outro lugar, como as configurações do terminal ou algo que você está fazendo com o redirecionamento de fluxo.

Armazene caracteres Unicode em um arquivo:

Salve no arquivo: foo.py:

#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
import codecs
import sys 
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
print(u'e with obfuscation: é')

Execute-o e canalize a saída para o arquivo:

python foo.py > tmp.txt

Abra tmp.txt e olhe dentro, você verá isto:

el@apollo:~$ cat tmp.txt 
e with obfuscation: é

Assim, você salvou em um arquivo o Unicode e com uma marca de ofuscação.


@ ofer.sheffer bizarramente estou aqui procurando resolver o problema oposto, a questão é que pode demorar um pouco.
— Chris H

40

Se você está tentando print()Unicode e recebendo erros de codec ascii , verifique esta página , cujo TLDR é feito export PYTHONIOENCODING=UTF-8antes de iniciar o python (esta variável controla a sequência de bytes que o console tenta codificar seus dados de string). Internamente, Python3 usa UTF-8 por padrão (veja o Unicode HOWTO), então esse não é o problema; você pode simplesmente colocar Unicode em strings, como visto nas outras respostas e comentários. É quando você tenta obter esses dados para o console que o problema acontece. Python acha que seu console só pode lidar com ascii. Algumas das outras respostas dizem: "Grave em um arquivo primeiro", mas observe que eles especificam a codificação (UTF-8) para fazer isso (portanto, o Python não muda nada na escrita) e, em seguida, usa um método para leitura o arquivo que apenas cospe os bytes sem nenhuma preocupação com a codificação, e é por isso que funciona.


Obrigado! Tive um problema unicde ao usar o pacote asciitree para gravar resultados em um arquivo. Isso resolveu para mim.
— Pål Thingbø

Muito obrigado. Passei horas pesquisando, feliz por ter encontrado isso.
— CharlyDelta

17

No Python 2, você declara strings Unicode com a u, as in u"猫"e usa decode()e encode()para traduzir de e para Unicode, respectivamente.

É um pouco mais fácil no Python 3. Uma ótima visão geral pode ser encontrada aqui . Essa apresentação esclareceu muitas coisas para mim.


1
Obrigado pelo link de vídeo. É muito útil.
— arun

1
Também está disponível como um não-vídeo aqui: Unicode pragmático ou, Como faço para parar a dor? (Pycon2012) nedbatchelder.com/text/unipain.html
— Tom Hundt

7

Considerando que este é o primeiro resultado de estouro de pilha ao pesquisar este tópico no Google, vale a pena mencionar que o prefixo u strings Unicode é opcional no Python 3. (o exemplo do Python 2 foi copiado da resposta principal)

Python 3 (ambos funcionam):

print('\u0420\u043e\u0441\u0441\u0438\u044f')
print(u'\u0420\u043e\u0441\u0441\u0438\u044f')

Python 2:

print u'\u0420\u043e\u0441\u0441\u0438\u044f'

Obrigado! Exatamente o que eu procurei: uma maneira universal de imprimir um caractere Unicode dentro de uma string para python2 e python3.
— JenyaKh

a versão com grampo também deve funcionar no Phyton 2 - grampos são uma opção e, portanto, são permitidos.
— Alexander Stohr

4

Eu uso o Winpython portátil no Windows, ele inclui o console IPython QT, eu poderia conseguir o seguinte.

>>>print ("結婚")
結婚

>>>print ("おはよう")
おはよう

>>>str = "結婚"


>>>print (str)
結婚

seu interpretador de console deve suportar Unicode para mostrar caracteres Unicode.


3

Só mais uma coisa que ainda não foi adicionada

No Python 2, se você quiser imprimir uma variável que tenha unicode e use .format(), faça isso (faça da string base que está sendo formatada uma string Unicode com u'':

>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal

3

Isso corrige a impressão UTF-8 em python:

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)

1

Substitua '+' por '000' . Por exemplo, 'U + 1F600' se tornará 'U0001F600' e incluirá "\" no prefixo do código Unicode e imprimirá. Exemplo:

>>> print("Learning : ", "\U0001F40D")
Learning :  🐍
>>> 

Verifique isso talvez ajude python emoji Unicode

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.