Форум сайта python.su
я сравниваю 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()
Офлайн
При сравнении питон конвертит строку к unicode, а потом сравнивает. Собственно о том и предупреждение в первом случае:
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
Офлайн
PooHкак раз такое и случилось у меня. только у меня словарь
Принцип примерно тот же, что и в случае 2 == 2.0, питон приведет первый аргумент к float
if (w.decode('cp1251').encode('utf-8') not in (u'раз', u'два', u'три'))
Отредактировано (Фев. 16, 2010 21:22:20)
Офлайн
mvunicode - это набор символов, как ASCII
я кстати считал что utf-8 это разновидность уникода одна из трёх но уже не первый раз их противоставляют друг дружке … в чём прикол ?
Отредактировано (Фев. 17, 2010 06:05:12)
Офлайн