Я хочу сделать словарь, где английские слова указывают на русский и французский переводы.
Как распечатать символы Unicode в Python? Кроме того, как вы храните символы unicode в переменной?
Я хочу сделать словарь, где английские слова указывают на русский и французский переводы.
Как распечатать символы Unicode в Python? Кроме того, как вы храните символы unicode в переменной?
Чтобы включить символы Unicode в исходный код Python, вы можете использовать символы удаления Unicode в форме \u0123
в вашей строке и префикс строковый литерал с 'u'.
Вот пример работы в интерактивной консоли Python:
>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Россия
Строки, объявленные как это, являются переменными типа Unicode, как описано в документации по юникоду Python.
Если запуск указанной выше команды не отображает текст правильно для вас, возможно, ваш терминал не способен отображать символы Unicode.
Информацию о чтении данных Unicode из файла см. в этом ответе:
Печать символа юникода непосредственно из интерпретатора python:
[email protected]:~$ python
Python 2.7.3
>>> print u'\u2713'
✓
Юникодный символ u'\u2713'
- это галочка. Интерпретатор печатает галочку на экране.
Вывести символ юникода из python script:
Поместите это в test.py:
#!/usr/bin/python
print("here is your checkmark: " + u'\u2713');
Запустите его следующим образом:
[email protected]:~$ python test.py
here is your checkmark: ✓
Если он не показывает галочку для вас, проблема может быть в другом месте, например, настройки терминала или что-то, что вы делаете с перенаправлением потока.
Сохранять символы Unicode в файле:
Сохраните это в файл: 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 и загляните внутрь, вы увидите следующее:
[email protected]:~$ cat tmp.txt
e with obfuscation: é
Таким образом, вы сохранили unicode e с отметкой обфускации на нем в файл.
Если вы пытаетесь print()
Unicode и получаете ошибки ascii-кодека, проверьте эту страницу, TL;DR которого выполняет export PYTHONIOENCODING=UTF-8
перед запуском python (эта переменная управляет той последовательностью байтов, которую консоль пытается кодировать ваши строковые данные как). Внутри Python3 по умолчанию использует UTF-8 (см. Unicode HOWTO), чтобы не проблема; вы можете просто поместить Unicode в строки, как видно из других ответов и комментариев. Это когда вы пытаетесь получить эти данные на консоль, что проблема происходит. Python думает, что ваша консоль может обрабатывать только ascii. Некоторые из других ответов говорят: "Сначала напишите его в файл", но обратите внимание, что они определяют кодировку (UTF-8) для этого (так что Python ничего не меняет в письменной форме), а затем используйте метод для чтения файл, который просто выплескивает байты без какого-либо отношения к кодировке, поэтому это работает.
В Python 2 вы объявляете строки unicode с помощью u
, как в u"猫"
, и используйте decode()
и encode()
для перевода в и из юникода соответственно.
Это довольно легко в Python 3. Здесь очень хороший обзор . Эта презентация многое прояснила для меня.
Я использую Portable winpython в Windows, он включает в себя консоль IPython QT, я мог бы добиться следующего.
>>>print ("結婚")
結婚
>>>print ("おはよう")
おはよう
>>>str = "結婚"
>>>print (str)
結婚
ваш консольный интерпретатор должен поддерживать unicode, чтобы показывать символы Unicode.
Еще одна вещь, которая еще не была добавлена
В 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
Это исправляет печать UTF-8 в python:
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
Учитывая, что это первый результат при поиске в 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'