Jino
Окт. 24, 2013 12:33:43
Из dive into python
In Python 3, all strings are sequences of Unicode characters. There is no such thing as a Python string encoded in UTF-8, or a Python string encoded as CP-1252. “Is this string UTF-8?” is an invalid question. UTF-8 is a way of encoding characters as a sequence of bytes. If you want to take a string and turn it into a sequence of bytes in a particular character encoding, Python 3 can help you with that. If you want to take a sequence of bytes and turn it into a string, Python 3 can help you with that too. Bytes are not characters; bytes are bytes. Characters are an abstraction. A string is a sequence of those abstractions.
Хочу до конца разобраться в этом.
Получается, строка в питоне - это последовательность символов юникода, но ее кодировка не UTF-8. Какая кодировка у этой строки? Почему Is this string UTF-8 - некорректный вопрос?
bismigalis
Окт. 24, 2013 13:23:23
UCS-2 или UCS-4 в зависимости от опции при компиляции
py.user.next
Окт. 24, 2013 13:39:44
Jino
Какая кодировка у этой строки?
никакая, это прямой юникод, он один
Budulianin
Окт. 24, 2013 14:19:05
Jino
строка в питоне - это последовательность символов юникода, но ее кодировка не UTF-8. Какая кодировка у этой строки?
Unicode это не кодировка, это стандарт по которому, каждому символу соответствует определённое число.
читать,
смотреть
Jino
Окт. 24, 2013 18:48:13
Budulianin
Хорошо, если я правильно понял, то строки в питоне представляют абстракцию над последовательностью байтов. Мне не нужно думать ни про кодировки, ни про что-либо еще, когда я работаю со строкой - мне достаточно знать, что туда я могу записать любой символ юникода. Если строковые данные мне нужно передавать или получать, тогда я пользуюсь хелпер-методами encode/decode. А по всяким вещам вроде оптимальности используемой памяти при работе со строчками, я полагаюсь на то, что это достаточно хорошо реализовано в интерпретаторе. Я прав?
Budulianin
Окт. 24, 2013 19:45:03
Jino
Хорошо, если я правильно понял, то строки в питоне представляют абстракцию над последовательностью байтов. Мне не нужно думать ни про кодировки, ни про что-либо еще, когда я работаю со строкой - мне достаточно знать, что туда я могу записать любой символ юникода.
Для Python3.x да. В Python2 строки не Unicode.
Jino
Если строковые данные мне нужно передавать или получать, тогда я пользуюсь хелпер-методами encode/decode.
Да, в программе надо работать с Unicode, в видео объяснили почему.
Jino
А по всяким вещам вроде оптимальности используемой памяти при работе со строчками, я полагаюсь на то, что это достаточно хорошо реализовано в интерпретаторе
Если не на него, то на кого?
bismigalis
Окт. 24, 2013 23:14:21
Jino
А по всяким вещам вроде оптимальности используемой памяти при работе со строчками, я полагаюсь на то, что это достаточно хорошо реализовано в интерпретаторе
начиная с python3.3 реализовано достаточно гибко
http://www.python.org/dev/peps/pep-0393/