Найти - Пользователи
Полная версия: unicode == utf-8 ???
Начало » Python для новичков » unicode == utf-8 ???
1
o7412369815963
я сравниваю 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()
PooH
При сравнении питон конвертит строку к unicode, а потом сравнивает. Собственно о том и предупреждение в первом случае:
 UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
Принцип примерно тот же, что и в случае 2 == 2.0, питон приведет первый аргумент к float
mv
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 это разновидность уникода одна из трёх но уже не первый раз их противоставляют друг дружке … в чём прикол ?
PooH
mv
я кстати считал что utf-8 это разновидность уникода одна из трёх но уже не первый раз их противоставляют друг дружке … в чём прикол ?
unicode - это набор символов, как ASCII
utf-8 - это способ кодирования текста из набора символов unicode, и их не три, а больше, тот же UCS-2 в Windows
т.е. на входе у вас может быть текст в utf-8, а внутри питон использует другое представление unicodных строк, и если не ошибаюсь оно зависит от платформы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB