Как напечатать символ Unicode в Python?


115

Я хочу сделать словарь, в котором английские слова указывают на русский и французский переводы.

Как распечатать символы юникода в Python? Кроме того, как вы храните символы Unicode в переменной?


Помогает ли это: docs.python.org/howto/unicode.html
paulsm4

Взгляните сюда . Добавление к строкам префикса uпозволяет Python рассматривать их как строковые литералы Юникода.
SRI

Ответы:


109

Чтобы включить символы Unicode в исходный код Python, вы можете использовать escape-символы Unicode в форме \u0123в своей строке и префикс строкового литерала с 'u'.

Вот пример, работающий в интерактивной консоли Python:

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

Строки, объявленные таким образом, являются переменными типа Unicode, как описано в документации Python Unicode .

Если выполнение указанной выше команды не отображает текст правильно, возможно, ваш терминал не может отображать символы Юникода.

Для получения информации о чтении данных Unicode из файла см. Этот ответ:

Чтение символов из файла в Python


4
Да, вы можете написать свой код в текстовых файлах в кодировке Unicode, но многие редакторы и инструменты не могут справиться с ними. Мой опыт работы с исходным кодом на множестве различных платформ показал, что лучше всего хранить исходный код в ASCII и использовать escape-последовательности Unicode.
Мэтт Райалл,

3
@MattRyall, я согласен, но группа российских разработчиков может захотеть писать комментарии и документы на русском языке. Для языкового проекта это хороший вариант.
Йохан Лундберг

3
Обратите внимание, что это работает, только если вы печатаете только строку. Если он заключен в другой объект, вы увидите escape-коды. Попробуйте, например, "print [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']".
btubbs

3
Что, если я сохраню его в строке mystr? тогда как это распечатать?
cqcn1991

1
@CarloWood Верхний ответ говорит вам именно то, что вы хотите. Justprint your_unicode_characters.encode('utf-8')
Yuhao Zhang

48

Напечатайте символ Юникода в Python:

Распечатайте символ Юникода прямо из интерпретатора Python:

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

Символ Юникода u'\u2713'- это галочка. Интерпретатор ставит галочку на экране.

Распечатайте символ Юникода из скрипта Python:

Поместите это в test.py:

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

Запускаем так:

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

Если для вас не отображается галочка, то проблема может быть в другом месте, например, в настройках терминала или в том, что вы делаете с перенаправлением потока.

Хранить символы Юникода в файле:

Сохраните это в файл: 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: é')

Запустите его и направьте вывод в файл:

python foo.py > tmp.txt

Откройте tmp.txt и загляните внутрь, вы увидите это:

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

Таким образом, вы сохранили код Unicode e с пометкой обфускации в файл.


@ ofer.sheffer как ни странно Я здесь, чтобы решить противоположную проблему, дело в том, что это может потребовать некоторой игры.
Chris H

40

Если вы пытаетесь использовать print()Unicode и получаете ошибки кодека ascii , ознакомьтесь с этой страницей , TL; DR на которой выполняется export PYTHONIOENCODING=UTF-8перед запуском python (эта переменная определяет, в какой последовательности байтов консоль пытается кодировать ваши строковые данные). Внутри Python3 по умолчанию использует UTF-8 (см. Unicode HOWTO) так что проблема не в этом; вы можете просто поместить Unicode в строки, как показано в других ответах и ​​комментариях. Проблема возникает тогда, когда вы пытаетесь вывести эти данные на консоль. Python считает, что ваша консоль может обрабатывать только ascii. В некоторых других ответах говорится: «Сначала запишите его в файл», но обратите внимание, что они указывают кодировку (UTF-8) для этого (так что Python ничего не меняет при записи), а затем использовать метод для чтения файл, который просто выплевывает байты, не обращая внимания на кодировку, поэтому это работает.


Спасибо! У меня возникла проблема с unicde при использовании пакета asciitree для записи результатов в файл. Это решило проблему для меня.
Пол Тингбо

Огромное спасибо. Провел часы в гугле, рад, что нашел это.
CharlyDelta 05

17

В Python 2 вы объявляете строки Unicode с помощью a u, как in u"猫"и используете decode()и encode()для перевода в и из Unicode, соответственно.

Это совсем немного проще в Python 3. Очень хороший обзор можно найти здесь . Эта презентация многое прояснила для меня.


1
Спасибо за ссылку на видео. Это очень полезно.
arun

1
Это также доступно как не-видео здесь: Pragmatic Unicode или Как мне остановить боль? (Pycon2012) nedbatchelder.com/text/unipain.html
Том Хундт

7

Учитывая, что это первый результат переполнения стека при поиске в Google по этой теме, следует упомянуть, что префикс uк строкам Unicode не является обязательным в Python 3. (пример Python 2 был скопирован из верхнего ответа)

Python 3 (оба работают):

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'

Спасибо! Именно то, что я искал: универсальный способ печати символа Юникода внутри строки как для python2, так и для python3.
JenyaKh

зажимная версия должна работать и в Phyton 2 - зажимы являются опцией и поэтому разрешены.
Александр

4

Я использую Portable winpython в Windows, он включает консоль IPython QT, я смог добиться следующего.

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

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

>>>str = "結婚"


>>>print (str)
結婚

ваш консольный интерпретатор должен поддерживать Unicode, чтобы отображать символы Unicode.


3

Еще одна вещь, которую еще не добавили

В Python 2, если вы хотите распечатать переменную с Unicode и использовать .format(), сделайте это (сделайте базовую строку, которая форматируется, строкой unicode с помощью u'':

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

3

Это исправляет печать UTF-8 в python:

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

1

Заменить "+" на "000" . Например, «U + 1F600» превратится в «U0001F600», добавив перед кодом Unicode «\» и напечатайте. Пример:

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

Проверьте это, возможно, это поможет смайлики Unicode Python

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.