Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 30, 2009 07:55:51

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

unicode == utf-8 ???

я сравниваю 2 строки одна utf-8 вторая unicode,
utf-8 - если симовол ascII, то под символ занимает 8 бит, иначе 16 бит ( в большинстве случаев )
unicode - все символы занимают по 16 бит
в примере 2 теста:
1) сравнение строк с использованием русских букв
2) сравнение аски2 строк
результат:
1. в первом тесте правильно - выпадает предупреждение и результат “no”
2. воторой тест проходит гладко и результат “yes”! - почему? строки же разные utf8 - знимает 4 байта, а unicode - 8 байт

#!/usr/bin/python
# -*- coding: utf-8 -*-

def test1():
utf8 = 'testТест'
uni = u'testТест'

if utf8==uni:
print 'yes'
else:
print 'no'
def test2():
utf8 = 'test'
uni = u'test'

if utf8==uni:
print 'yes'
else:
print 'no'


if __name__ == '__main__':
test1()
test2()

Офлайн

#2 Июнь 30, 2009 08:36:33

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

unicode == utf-8 ???

При сравнении питон конвертит строку к unicode, а потом сравнивает. Собственно о том и предупреждение в первом случае:

 UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
Принцип примерно тот же, что и в случае 2 == 2.0, питон приведет первый аргумент к float



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

Офлайн

#3 Фев. 16, 2010 21:15:54

mv
От:
Зарегистрирован: 2010-02-16
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

unicode == utf-8 ???

PooH
Принцип примерно тот же, что и в случае 2 == 2.0, питон приведет первый аргумент к float
как раз такое и случилось у меня. только у меня словарь

if (w.decode('cp1251').encode('utf-8') not in (u'раз', u'два', u'три'))
код другой но последовательность енкодов та же. и выплёвывает эту фигню
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

не удобно то что не исключение, торчит в консоле непотребно
на до бы убрать
я кстати считал что utf-8 это разновидность уникода одна из трёх но уже не первый раз их противоставляют друг дружке … в чём прикол ?



Отредактировано (Фев. 16, 2010 21:22:20)

Офлайн

#4 Фев. 17, 2010 06:03:44

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

unicode == utf-8 ???

mv
я кстати считал что utf-8 это разновидность уникода одна из трёх но уже не первый раз их противоставляют друг дружке … в чём прикол ?
unicode - это набор символов, как ASCII
utf-8 - это способ кодирования текста из набора символов unicode, и их не три, а больше, тот же UCS-2 в Windows
т.е. на входе у вас может быть текст в utf-8, а внутри питон использует другое представление unicodных строк, и если не ошибаюсь оно зависит от платформы.



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

Отредактировано (Фев. 17, 2010 06:05:12)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version