Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 16, 2010 18:07:23

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

unicode и utf-8

o7412369815963
в питоне все - высокоуровневый объект,
уникод - все же кодировка, символы кодируются в 16бит. за счет фиксированного веса символа с ним проще работать чем например с утф8 у которого вес символа плавающий. ( вес - кол-во бит )

POST и GET можно послать в уникоде, но сервер не поймет smile, а питон при передаче текста в уникоде преобразует его в утф8, например когда делаем принт или передачу данных через сокеты, на другой стороне выходит утф8.
Ну хорошо, в питоне даже интегер, это не просто дцать байт в памяти… Просто обычный str представляет массив байт, а unicode массив символов. Для того, чтобы передать массив символов по сети, тебе сначала нужно закодировать его в массив байт (потому что провода у нас только байты понимают). И в этом принципиальная разница. И не имеет значения, в какой кодировке эти символы хранятся внутри объекты – нельзя послать в сокет или сохранить на диск сам unicode, без кодирования его в str.

Романнн
Использую psycopg. Эту задачу можно решить вручную, т.е., к примеру, как предложил o7412369815963, хотелось бы так же как и с POST и GET ее решить проще.
Ну так кодируй в утф-8 перед посыланием в сокет.



Офлайн

#2 Фев. 16, 2010 18:13:19

Романнн
От:
Зарегистрирован: 2009-09-30
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

unicode и utf-8

ZZZ
Ну так кодируй в утф-8 перед посыланием в сокет.
Сайт уже написан и придется везде так кодировать. Поэтому и спрашиваю, может существуют какие-то стандартные/нестандартные методы, чтобы решить эту задачу проще?



Офлайн

#3 Фев. 16, 2010 19:30:43

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

unicode и utf-8

ZZZ
1) Просто обычный str представляет массив байт, а unicode массив символов.
2) Для того, чтобы передать массив символов по сети, тебе сначала нужно закодировать его в массив байт (потому что провода у нас только байты понимают).
И не имеет значения, в какой кодировке эти символы хранятся внутри объекты – нельзя послать в сокет или сохранить на диск сам unicode, без кодирования его в str.
1) как бы да, согласен
2) можно послать и сохранить уникод:
WCHAR buf = L"Hello";
fwrite(f,&buf,sizeof(buf));
(С++), таким образом в файл будет записан сам уникод, в мире не только питон существует ;)

Офлайн

#4 Фев. 16, 2010 20:37:18

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

unicode и utf-8

o7412369815963
2) можно послать и сохранить уникод:
Код:

WCHAR buf = L“Hello”;
fwrite(f,&buf,sizeof(buf));

(С++), таким образом в файл будет записан сам уникод, в мире не только питон существует wink
:-)))
Неее… Тут buf, это массив элементов по два байта (слово? а не зависит ли оно от порядка байт в слове?) каждый. Это равносильно u'Hello'.encode(“UTF-16”).
И понимание этого важнО.



Офлайн

#5 Фев. 17, 2010 11:06:25

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

unicode и utf-8

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

Офлайн

#6 Фев. 17, 2010 11:37:26

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

unicode и utf-8

o7412369815963
любые символы состоят из байтов, байты можно передать и сохранить, значит любые символы можно передать и сохранить, в том числе и уникод.
Ты не понял той тонкой разницы, между логическим “символ” и физическим “байт”.
Символ можно закодировать в байты, а байты декодировать в символ. Символ это… Блин! Я не умею объяснять!
“Символ”, это просто логическое понятие, обозначающий некий… символ. Он имеет множество физических представлений (кодировок?). Тип unicode создан именно для работы с символами. Для того, чтобы текст был текстом, а не массивом байт в какой-то конкретной кодировке.



Офлайн

#7 Фев. 17, 2010 13:30:21

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

unicode и utf-8

ZZZ
Ты не понял той тонкой разницы, между логическим “символ” и физическим “байт”.
ты не знаешь что я понял или не понял. речь про можно записать или нет.
я знаю какую разницу ты имеешь ввиду. я писал свою операционную систему и у меня там были “свои” символы, и что? их нельзя на диск записать? да на диск можно записать состояние работающей операционной системы с открытым блокнотом и напечатанными в нем твои символы. и без разницы какой они имеют логический смысл и структуру, все будет записано.

Офлайн

#8 Фев. 17, 2010 15:25:47

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

unicode и utf-8

o7412369815963
ты не знаешь что я понял или не понял. речь про можно записать или нет.
я знаю какую разницу ты имеешь ввиду. я писал свою операционную систему и у меня там были “свои” символы, и что? их нельзя на диск записать? да на диск можно записать состояние работающей операционной системы с открытым блокнотом и напечатанными в нем твои символы. и без разницы какой они имеют логический смысл и структуру, все будет записано.
Свою операционную систему писал, а на шифт нажимать забываешь… Думай, что думаешь, прежде, чем ещё раз подумать.
Всё, закрыли флейм.



Офлайн

#9 Фев. 17, 2010 15:52:26

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

unicode и utf-8

Да, спор у вас какой-то странный. ZZZ прав что unicode это набор символов из таблицы, а не кодировка.

Автору топика советую не морочить нам головку, а почитать чем отличаются указанные им же версии Джанги и как надо осуществлять миграцию.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version