Форум сайта python.su
0
Добрый вечер буду крайне признателен если кто объяснит как выбрать кодировку например
#1251 откуда она берется зависит ли от версии как её поменять
какие для кирилицы… зачем нужны кодировки..
Офлайн
1
Попробую ответить:
Кодировка - условно таблица, в одной колонке которой число, в другой - графическое отображение. По ней программа определяет, как вывести текст (ведь все данные хранятся в виде байта, заполненного 0 и 1. - как их отображать и воспринимать решает программист и иногда пользователь).
Unicode, UTF-8, Windows-1251, cp1251 могут хранить кириллицу. Причём все юникодные будут использовать 2 и более байта на символ (но подходят для люыбых текстов), 1251-ые - один (зато только кириллица).
В Python по умолчанию есть встроенная кодировка (В Python 3 - Unicode, для 2 - были строки ASCII и Unicode). Чтобы текст вывести функцией print, вначале надо привести данные к кодировке по умолчанию.
Примеры для Python 3, но отличия в версиях на сколько помню, тут минимальны:
Преврать строку из кодировки по умолчанию в иную кодировку можно с помощью ф-ции encode
s = "Привет" new_s = s.encode("windows-1251") type(new_s)#builtins.bytes
s = b'\xcf\xf0\xe8\xe2\xe5\xf2' new_s = s.decode("windows-1251") print(new_s)
#Python 2 import io with io.open("C:\\Users\\myfile.txt", "r", encoding="windows-1251") as myfile: print myfile.read()
#Python 3 with open("C:\\Users\\myfile.txt", "r", encoding="windows-1251") as myfile: print(myfile.read())
Отредактировано vax (Дек. 11, 2014 20:30:06)
Офлайн
221
vaxхорошая попытка, но не совсем удачная.
Попробую ответить:
The items of a Unicode object are Unicode code units. A Unicode code unit is represented by a Unicode object of one item and can hold either a 16-bit or 32-bit value representing a Unicode ordinal (the maximum value for the ordinal is given in sys.maxunicode, and depends on how Python is configured at compile time)А это очень важно. Тем более нужно понимать отличия объекта Unicode и текста кодированным по стандарту Юникод.
# -*- coding: utf-8 -*-
Офлайн
857
dip3. strings
Вкратце:
Есть юникод - стандарт, описывающий числа по порядку от нуля до чуть больше миллиона, часть из которых обозначает символы. В юникоде помещаются все символы всех народов, которые были и есть, и есть ещё много места для будущих символов. Там есть и смайлики всякие, что говорит о любых символах, а не только языковых.
Для юникода есть несколько кодировок - utf-8, utf-16, utf-32, - которые переводят числа юникода в байтовые последовательности. Байтовые последовательности уже используются для передачи (на экран) и хранения (в файлах).
Но юникод появился не сразу, а, можно сказать, недавно, поэтому до него эти функции выполняли другие средства. Поэтому существует как бы пропасть между одним и тем же: utf-8 может кодировать иероглифы, cp1251 не может кодировать иероглифы.
Отредактировано py.user.next (Дек. 12, 2014 02:17:14)
Офлайн