Исчерпывающее руководство по Юникоду и кодировке символов в Python


Оглавление (нажмите, чтобы открыть):

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

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

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

Чтобы включить символы Unicode в исходный код Python, вы можете использовать символы удаления Unicode в форме \u0123 в вашей строке и префикс строковый литерал с ‘u’.

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

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

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

Информацию о чтении данных Unicode из файла см. в этом ответе:

Печать символа юникода в Python:

Печать символа юникода непосредственно из интерпретатора python:

Юникодный символ u’\u2713′ — это галочка. Интерпретатор печатает галочку на экране.

Вывести символ юникода из python script:

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

Запустите его следующим образом:

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

Сохранять символы Unicode в файле:

Сохраните это в файл: foo.py:

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

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

Таким образом, вы сохранили 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, я мог бы добиться следующего.

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

Еще одна вещь, которая еще не была добавлена

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

Кодирование строк символов ASCII в Python

Рассмотрим несколько примеров, демонстрирующих основы кодирования строк в Python. Строки символов ASCII являются простейшей разновидностью строк символов Юникода, которые хранятся как последовательности байтов, представляющих символы:

Обычный текст, состоящий только из 7-битовых символов ASCII, как в данном примере, представляется как последовательность байтов в любых схемах кодирования Юникода, о чем уже говорилось выше:

Ваша мечта – стать лидером любимой соцсети или вывести свою группу в топ? Старт получился удачным, но СММ продвижение стало притормаживать. Настала пора искать свежие идеи, нужен новый взгляд. Загляните на этот портал, чтобы освежить знания по СММ продвижению в социальных сетях, узнать о новинках и секретах успеха, познакомиться с опытом, который придаст ускорение.

Фактически объекты типа bytes, возвращаемые данной операцией кодирования строки символов ASCII, в действительность являются последовательностью коротких целых чисел, которые просто выводятся как символы ASCII, когда это возможно:

python unicode — encode/decode

Юникод нужен при работе с символами нескольких языков. Кириллица, буквы греческого алфавита, иероглифы и т.п. не будут передаваться при вводе их через формы обратной связи. Выполнение скрипта будет завершаться ошибкой если не использовать юникод:


[Sat Aug 25 04:40:52.573105 2020] [cgid:error] [pid 28564:tid 139992957437696] [client 212.104.87.172:40958] End of script output before headers: add.cgi, referer: https://example.com/page.html
Traceback (most recent call last):
File «/var/www/site/restore.cgi», line 44, in
print («

\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0436\u0438\u0434\u0430\u0439\u0442\u0435 \u043e\u0442\u0432\u0435\u0442\u0430

Из сообщения об ошибке следует, что кодек ascii не может обрабатывать символы в кодировке, отличной от ASCII. Чтобы работать с этими символами требуется UTF-8.

В юникоде символы кодируются и приводятся к виду \uXXXX. Затем обрабатываются скриптом, далее можно выполнить обратное преобразование.

Мой блог

суббота, 22 декабря 2012 г.

Кодирование строк Unicode в Python

Экранированные значения байтов в шестнадцатеричном виде:

Экранированные значения символов Unicode из четырех шестнадцатеричных цифр
( 2- байтовые 16 — битные) коды символов:

Экранированные значения символов Unicode из восьми шестнадцатеричных цифр
( 4- байтовые 32 — битные) коды символов:

Шестнадцатеричное представление ASCII — кодов символов:

O — 4F
R — 52
A — 41
C — 43
L — 4C
E — 45

Символы UNICODE 2-х байтовые (16- битные):

O — 004F
R — 0052
A — 0041
C — 0043
L — 004C
E — 0045

>>> s = ‘\u004f\u0052\u0041\u0043\u004c\u0045’
>>> s
‘ORACLE’
>>>

Символы UNICODE 4-x байтовые (32 — битные):

>>> s = ‘\U0000004f\U00000052\U00000041\U00000043\U0000004c\U00000045’
>>> s
‘ORACLE’
>>>

Кодирование — процесс преобразования строки символов в последовательность простых байтов в соответствии с желаемой кодировкой.

Декодирование — процесс преобразования последовательности байтов в строку символов в соответствии с желаемой кодировкой.

Преобразуем объект типа str (последовательность символов unicode) в объект типа bytes (последовательность байтов, т.е. коротких целых чисел)

Фактически объекты типа bytes, возвращаемые данной операцией кодирования строки символов, в действительности являются последовательностью коротких целых чисел, которые просто выводятся как символы ASCII, когда это возможно.

Так как мы не указали желаемой кодировки, то наши символы были преобразованы в последовательность простых байтов в соответствии с кодировкой по умолчанию:

>>> import sys
>>> sys.platform
‘win32’
>>>
>>> sys.getdefaultencoding()
‘utf-8’
>>>

А вообще функцию str.encode() следует вызывать явно указывая кодировку:

Существует и обратная функция, которая преобразует последовательность простых байтов в строку и на основе объекта типа bytes создает объект типа str.

Тут также, если кодировка не указана, то используется по умолчанию.

Существуют еще две функции кодирования и декодирования:

Кодирование:
Функция bytes(s, encoding)

Декодирование:
Функция str(b, encoding)

в этих функциях параметр encoding является обязательным.

Первая функция вообще выдаст ошибку, если не указать параметр encoding:

>>> bytes(s)
Traceback (most recent call last):
File «

«, line 1, in
bytes(s)
TypeError: string argument without an encoding
>>>

А вторая сработает, но вернет вместо объекта str строковую форму объекта bytes (это не то, что требуется):


Используйте эти две функции всегда с параметром encoding:

Объекты типа bytes, в действительности являются последовательностью коротких целых чисел, которые выводятся как символы ASCII, когда это возможно:

>>> list(s.encode(‘latin-1’))
[79, 82, 65, 67, 76, 69]
>>>

Рассмотрим еще несколько примеров:

Кодировка по умолчанию у нас utf-8

Рассмотрим строковый символ ‘O’

Его ASCII представление : ‘\x4f’
Его unicode представление : ‘\u004f’ или ‘\U0000004f’

Данный символ в кодировке по умолчанию (utf-8) будет иметь код в виде байта с целочисленным значением:

Как видим, неважно в каком представлении мы передали строковый символ функции ord().
Его код в кодировке utf-8 имеет одно значение.

При декодировании данного байта кода, используя кодировку по умолчанию (utf-8) мы получим представление символа которому соответствует этот код:

Возьмем любой символ ASCII

Его байтовое представление находим так:

Значит его можно представить:

Возьмем не ASCII символ:

Его байтовое представление находим так:

Значит его можно представить:

Возьмем символ ‘茶’ (этот символ в китае означает слово чай)

В однобайтовом виде его уже не представить

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

Набор символов ASCII — это символы с кодами в диапазоне от 0 до 127.
(Что позволяет сохранять каждый символ в одном 8-битовом байте, в котором фактически используется только 7 младших байтов)

Некоторые стандарты позволяют использовать все возможные значения 8-битных байтов от 0 до 255, чтобы обеспечить возможность представления специальных символов, отображая их в диапазоне значений от 128 до 255 (за пределами диапазона ASCII).

Один из таких стандартов, известный под названием Latin-1, широко используется в западной европе.

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

Стандарт Unicode обеспечивает более гибкие возможности.
Каждый символ в строке Unicode может быть представлен несколькими байтами.

Чтобы хранить текст строки Unicode в памяти компьютера, его необходимо транслировать в последовательность простых байтов и обратно, используя определенную кодировку.

Для некоторых кодировок процесс преобразования тривиально прост:

в кодировках ASCII и Latin-1, например, каждому символу соответствует единственный байт, поэтому фактически никакого преобразования не требуется.

Для других кодировок процедура отображения может оказаться намного сложнее и порождать по несколько байтов для каждого символа.

Кодировка UTF-8 позволяет представить широкий диапазон символов, используя схему с переменным числом байтов.

Символы с кодами в диапазоне от 128 до 2047 преобразуются в двухбайтовые последовательности, где каждый байт имеет значение от 128 до 255.

Символы с кодами выше 2047 преобразуются в трех или четырехбайтовые последовательности, где каждый байт имеет значение от 128 до 255.

Строки с символами ASCII остаются компактными.
Набор ASCII является подмножеством обеих кодировок, Latin-1 и UTF-8.

Все текстовые файлы, состоящие из символов ASCII, будут считаться допустимыми текстовыми файлами с точки зрения кодировки UTF-8, потому что ASCII — это подмножество 7-битных символов в кодировке UTF-8.

С точки зрения программиста на языке Python, кодировки определяются как строки, содержащие названия кодировок.


Язык Python поддерживает примерно 100 различных кодировок.
Полный список можно посмотреть так:

PACKAGE CONTENTS
aliases
ascii
base64_codec
big5
big5hkscs
bz2_codec
charmap
cp037
cp1006
cp1026
cp1140
cp1250
cp1251
cp1252
cp1253
cp1254
cp1255
cp1256
cp1257
cp1258
cp424
cp437
cp500
cp720
cp737
cp775
cp850
cp852
cp855
cp856
cp857
cp858
cp860
cp861
cp862
cp863
cp864
cp865
cp866
cp869
cp874
cp875
cp932
cp949
cp950
euc_jis_2004
euc_jisx0213
euc_jp
euc_kr
gb18030
gb2312
gbk
hex_codec
hp_roman8
hz
idna
iso2022_jp
iso2022_jp_1
iso2022_jp_2
iso2022_jp_2004
iso2022_jp_3
iso2022_jp_ext
iso2022_kr
iso8859_1
iso8859_10
iso8859_11
iso8859_13
iso8859_14
iso8859_15
iso8859_16
iso8859_2
iso8859_3
iso8859_4
iso8859_5
iso8859_6
iso8859_7
iso8859_8
iso8859_9
johab
koi8_r
koi8_u
latin_1
mac_arabic
mac_centeuro
mac_croatian
mac_cyrillic
mac_farsi
mac_greek
mac_iceland
mac_latin2
mac_roman
mac_romanian
mac_turkish
mbcs
palmos
ptcp154
punycode
quopri_codec
raw_unicode_escape
rot_13
shift_jis
shift_jis_2004
shift_jisx0213
tis_620
undefined
unicode_escape
unicode_internal
utf_16
utf_16_be
utf_16_le
utf_32
utf_32_be
utf_32_le
utf_7
utf_8
utf_8_sig
uu_codec
zlib_codec

Получить список всех кодировок, которые Python может кодировать в

Я пишу сценарий, который будет пытаться кодировать байты во многие различные кодировки в Python 2.6. Есть ли способ получить список доступных кодировок,которые я могу перебирать?

причина, по которой я пытаюсь это сделать, заключается в том, что у пользователя есть текст, который не закодирован правильно. Есть забавные персонажи. Я знаю символ Юникода, который все портит. Я хочу иметь возможность дать им ответ: «ваш текстовый редактор интерпретирует эту строку как кодировку X, а не Y кодирование.» Я думал, что попытаюсь закодировать этот символ, используя одну кодировку, затем декодировать его снова, используя другую кодировку, и посмотреть, получим ли мы ту же последовательность символов.

т. е. что-то вроде этого:

8 ответов

к сожалению encodings.aliases.aliases.keys() не является подходящим ответом.

aliases (как и следовало ожидать) содержит несколько случаев, когда разные ключи сопоставляются с одним и тем же значением, например 1252 и windows_1252 оба сопоставлены с cp1252 . Вы можете сэкономить время, если вместо aliases.keys() вы используете set(aliases.values()) .

НО ЕСТЬ ПРОБЛЕМА ПОХУЖЕ: aliases не содержит кодеков, которые не имеют псевдонимов (например, cp856, cp874, cp875, cp737 и koi8_u).

также стоит отметить, что, однако, вы получаете полный список кодеков, может быть хорошей идеей игнорировать кодеки, которые не касаются кодирования/декодирования наборов символов, но делают некоторые другие преобразования, например zlib , quopri и base64 .

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

для a начнем, это неоднозначно. Один декодирует байты в unicode, а другой кодирует unicode в байты. Что ты хочешь сделать?

чего вы действительно пытаетесь достичь: вы пытаетесь определить, какой кодек использовать для декодирования некоторых входящих байтов, и планируете попробовать это со всеми возможными кодеками? [Примечание: latin1 будет декодировать что-нибудь] вы пытаетесь определить язык некоторого текста unicode, пытаясь кодировать его со всеми возможными кодеками? [Примечание: utf8 будет кодировать что угодно].

другие ответы здесь, похоже, указывают на то, что построение этого списка программно трудно и чревато ловушками. Однако это, вероятно, не нужно, так как документация содержит полный список стандартных кодировок, поддерживаемых Python, и сделала это с Python 2.3.

вы можете найти эти списки (для каждой стабильной версии языка, выпущенных до сих пор) являются списками для каждой документированной версии Python. Обратите внимание, что если вы хотите обратную совместимость, а не просто поддержку определенной версии Python, вы можете просто скопировать список из последний версия Python и проверьте, существует ли каждая кодировка в Python под управлением вашей программы прежде чем пытаться использовать его.

в Python 2.3 (59 кодировки)

в Python 2.4 (85 кодировки)

Python 2.5 (86 кодировки)

в Python 2.6 (90 кодировки)

Python 2.7 (93 кодировки)

в Python 3.0 (89 кодировки)

в Python 3.1 (90 кодировки)

в Python 3.2 (92 кодировки)

Python 3.3 (93 кодировки)

в Python 3.4 (96 кодировки)

в Python 3.5 (98 кодировки)

Python 3.6 (98 кодировки)

Python 3.7 (98 кодировок)

в случае, если они имеют отношение к чьему-либо случаю использования, обратите внимание, что документы также перечисляют некоторые Python-специфические кодировки, многие из которых, по-видимому, в основном предназначены для использования внутренними устройствами Python или иным образом странно, как ‘undefined’ кодировка, которая всегда создает исключение, если вы пытаетесь ее использовать. Вы, вероятно, хотите полностью игнорировать их, если, как и вопрос-спрашивающий здесь, вы попытка выяснить, какая кодировка использовалась для некоторого текста, с которым вы столкнулись в реальном мире. Начиная с Python 3.6, список выглядит следующим образом:

наконец, если вы хотите обновить мои таблицы выше для более новой версии Python, вот (грубый, не очень надежный) скрипт, который я использовал для их создания:

Возможно, вам стоит попробовать использовать Универсальный Детектор Кодирования (chardet) библиотека вместо реализации его самостоятельно.

Вы можете использовать технику чтобы перечислить все модули в encodings пакета.

Я сомневаюсь, что в модуле кодеков есть такой метод/функциональность, но если вы видите encoding/__init__.py , функция поиска ищет через папку модулей кодировок, поэтому вы можете сделать то же самое, например


но как кто-нибудь может зарегистрировать кодек, так что это не будет исчерпывающий список.

исходный код Python имеет скрипт в Tools/unicode/listcodecs.py в котором перечислены все кодеки.

среди перечисленных кодеков, однако, есть некоторые, которые не являются преобразователями Юникода в байт, например base64_codec , quopri_codec и bz2_codec , как указал @John Machin.

Вероятно, вы можете сделать это:

вот программный способ перечислить все кодировки, определенные в пакете кодировок stdlib, обратите внимание, что это не будет перечислять пользовательские кодировки. Это сочетает в себе некоторые из трюков в других ответах, но фактически создает рабочий список, используя каноническое имя кодека.

Исчерпывающее руководство по Юникоду и кодировке символов в Python

encoding — Название кодировки. По умолчанию — системная кодировка, доступная из sys.getdefaultencoding().

+py2.3 errors=’strict’ — Наименование схемы обработки ошибок. По умолчанию — ‘strict’.

Начиная c +py2.7 параметры могут быть заданы при помощи именованных аргументов.

Схемы обработки ошибок

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

Сломанная кодировка при выводе в Python 2.7

Имеется сценарий, когда я его выполняю, вместо русских символов появляется:

Гугл предложил решение проблемы путем добавления в начало файла строк:

Но в таком случае появляется вывод:

Т.е добавляется префикс «u»,но на итог это почти никак не влияет.
Пробовал менять кодировку файла. Не помогает. Понимаю, вопрос глупый и решается, скорей всего, элементарно.

Проблема одна и та же в Ubuntu и Windows. В данный момент пытаюсь бороться в Windows XP

2 Answers

Полезную информацию, также можете найти здесь, здесь, здесь и здесь

Кракозябы вы видите потому что используете байты, а не Unicode для текста, что ведёт к выводу текста в неправильной кодировке (текст закодированный в utf-8 выводится в Виндовой кодировке):

Не используйте байты, используйте Unicode для представления текста.

from __future__ import unicode_literals заставляет ‘abc’ строковые константы создавать Unicode строки на Питоне 2 (их поведение из Питона 3). В противном случае, используйте u» префикс, чтобы текст в виде констант в коде задавать.

u’\u042d\u0442\u043e’ появляется потому что вы вызываете repr() функцию, которая возвращает текстовое представление объекта. Задача repr() функции получить однозначное представление объекта, например, для отладки, тестов. Идеально, когда eval(repr(obj)) == obj .

В общем случае, чтобы напечатать Юникодную строчку в Питоне, уберите repr() :

Если печатаемые символы поддерживаются в текущем окружении (кодировка консоли на Винде, правильная локаль в *nix), то этого достаточно. Если вывод текста перенаправлен в Питоне 2 или хочется произвольные символы печатать на Windows, даже те которые не поддерживаются OEM codepage такой как cp866, то настройте PYTHONIOENCODING , если вывод перенаправлен в файл, pipe или установите win-unicode-console пакет, чтобы в Windows консоль показывать любые (BMP) символы (если правильный шрифт настроен).

Кодировка

На самом глубоком уровне компьютер оперирует исключительно цифрами 0 и 1 . Это так называемый двоичный код, а единички и нули называются битами, от “binary digit” — «двоичная цифра».

Обычные, привычные нам числа в десятичной системе счисления, закодированы с помощью двоичных чисел:

Но как быть с текстом? Компьютер на самом деле не знает ничего о буквах, знаках пунктуации и прочих текстовых символах. Все эти символы так же закодированы числами.

Можно взять английский алфавит и дать каждой букве число, начиная с единицы по порядку:

В этом заключается суть кодировок.

Во время своей работы, программы используют кодировки для преобразования чисел в символы и наоборот. Причем сама программа не имеет представления о смысле этих символов.

  • hello → 8 5 12 12 15
  • 7 15 15 4 → good


Кроме букв алфавита, в таблицы кодировок входят знаки препинания и другие полезные символы. Вы наверняка сталкивались с кодировками, например, ASCII или UTF-8.

Разные кодировки содержат разное количество символов. Изначально небольших таблиц вроде ASCII было достаточно для большинства задач. Но в ней только латинские буквы, несколько простых символов вроде % и ? и специальные управляющие символы типа перевода строки.

С распространением компьютеров, разным странам понадобились свои, более широкие таблицы. В том числе для кириллических букв, восточных иероглифов, арабской вязи, дополнительных математических и типографских символов, а впоследствии даже для эмодзи-смайликов.

Сегодня в большинстве случаев используется один из вариантов юникода, включающий в себя знаки почти всех письменных языков мира.

Задание

В Python можно «запросить» и вывести на экран любой символ из кодировки ASCII. Например:

На экран выведется символ с номером 63 — вопросительный знак ? . Таким способом можно выводить любой символ.

Найдите в интернете таблицу кодов ASCII. Можно использовать запросы типа “ascii codes table” или «коды ascii». Обычно в таких таблицах коды указаны сразу в нескольких системах счисления: десятичной, двоичной, восьмеричной и шестнадцатеричной. Нас интересует десятичный код (dec или decimal).

Используя пример выше и найденную таблицу, выведите на экран (каждый на своей собственной строке)

(Конечно, можно «обмануть» тесты и просто сделать print(‘

‘) и т.д., но так будет совсем неинтересно 🙂

Определения

Кодировка — набор символов, закодированных с помощью чисел для представления текста в электронном виде.

3.1.3. Строки Unicode

Начиная с версии 1.6, в языке Python доступен новый тип данных для хранения текста — строка Unicode. Его можно использовать для работы с текстом, содержащим одновременно буквы и символы нескольких языков, доступных в Unicode (см. https://www.unicode.org ). Строки Unicode полностью интегрируется с обычными строками, автоматически производя, где это необходимо, преобразование.

Unicode имеет значительное преимущество — предоставляет возможность использовать все символы, используемые в современных и древних текстах. Ранее мы могли использовать только 256 символов из определенной кодовой страницы, что приводило к большим затруднениям, особенно при интернационализации (internationalization, обычно записывается как i18n — i + 18 символов + n) программного обеспечения. Unicode решает эту проблему, определяя одну кодовую страницу для всех символов.

Создаются строки Unicode настолько же просто, как и обычные строки:

>>> u’Hello World !’
u’Hello World !’

Маленькая буква ‘u’ перед кавычками указывает, что предполагается создание строки Unicode. Если Вы хотите включить в строку специальные символы, используйте управляющие последовательности:

>>> u’Hello\u0020World !’
u’Hello World !’

Управляющая последовательность \u0020 указывает, что необходимо вставить Unicode символ с порядковым номером в шестнадцатеричной системе исчисления 0x0020 (пробел).

Благодаря тому, что первые 256 символов Unicode те же, что и в стандартной кодировке Latin-1, ввод текста на большинстве языков, используемых в западных странах, сильно упрощается.

Как и для обычных строк, для строк Unicode существует «необрабатываемый» режим, задаваемый с помощью буквы ‘r’ или ‘R’ перед кавычками. Управляющими считаются только последовательности, которые применяются для обозначения символов Unicode, и только если используется нечетное количество символов обратной косой черты перед буквой ‘u’ :

>>> ur’Hello\u0020World !’
u’Hello World !’
>>> ur’Hello\\u0020World !’
u’Hello\\\\u0020World !’

Кроме описанного выше метода, Python предоставляет возможность создать строку Unicode на основе строки в известной кодировке. Встроенная функция unicode() может работать с Latin-1, ASCII, UTF-8, UTF-16, с русскими кодировками ISO-8859-5, KOI8-R, CP1251, CP866 и Mac-cyrillic, и многими другими. Python по умолчанию использует кодировку ASCII 1 , например, при выводе на экран инструкцией print и записи в файл. Если у Вас есть данные в определенной кодировке, для получения строки Unicode используйте встроенную функцию unicode() , указав кодировку в качестве второго аргумента:

>>> s = unicode(«Привет», «KOI8-R»)
>>> s
u’\u041F\u0440\u0438\u0432\u0435\u0442’

Если строка Unicode содержит символы с кодом больше 127, преобразование в ASCII не возможно:

>>> str(s)
Traceback (most recent call last):
File » «, line 1, in
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-5: ordin
al not in range(128)

Метод encode() позволяет преобразовывать строки Unicode в обычные строки, содержащие текст в указанной кодировке:

Вывод таблицы символов

В Python v.3 для строк используется кодировка Unicode. Следует помнить, в Python, в отличие от многих других языков программирования, нет такого типа данных как одиночный символ. В Python любой символ — это строка, длина которой равна единице.

Первые 128 символов по таблице Unicode такие же как и в таблице символов ASCII. Выведем их, начиная с пробела, кодовый номер которого 32.

Чтобы привести вывод к табличной форме будем переходить на новую строку после каждого десятого выведенного на экран символа. Для этого в коде ниже используется оператор if.

Функция chr() возвращает символ из таблицы Unicode, соответствующий переданному коду-числу.

Мастер Йода рекомендует:  Виртуальная реальность — всё по этой теме для программистов
Добавить комментарий