LINUX.ORG.RU

[python] Строки и мистика

 


0

0

Доброго времени суток.

В общем, столкнулся я со следующей проблемой. А именно есть две строки: str1 и str2 (первая строка получается из инета, а именно с помощью библиотеки twisted, вторая задана в коде), если я их вывожу путем print То выводятся две абсолютно одинаковые строки(как и должно быть), но если я их пытаюсь сравнить, то получаю false. Пробовал через string.find(str1,str2) получаю -1. Но строки то одинаковые! Почему может случаться такая фигня?



Последнее исправление: Daeloce (всего исправлений: 1)

Python 2.6.4 (r264:75706, Jun  4 2010, 18:20:16)
[GCC 4.4.4 20100503 (Red Hat 4.4.4-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> str1="Hello"
>>> str2="Hello"
>>> str1==str2
True
Donnie_Darko
()

Перенаправляем вывод в файл и смотрим в hex редакторе.

Olegymous ★★★
()
Ответ на: комментарий от Donnie_Darko

Уточнил условие задачи.

Регистр совпадает, говорю же если их вывести путем print они выглядят одинаково.

Вот участок кода:

        str1 = command[0]
        str2 = "test"
        print str1
        print str2
        
        print( str1 == str2 )

А вот вывод который он генерит:

test
test
False
Daeloce
() автор топика
Ответ на: комментарий от Daeloce
str1 = command[0]
str2 = "test"
print str1
print str2

print len(str1)        
print len(str2)

что говорит?

Donnie_Darko
()
Ответ на: комментарий от Daeloce

Может там пробелы, специальные символы и прочая хрень? Выводи посимвольно :]

vasily_pupkin ★★★★★
()

Если строки одинаково выглядят, это не значит, что они равны.

>>> s1 = '123\x00'
>>> s2 = '123'
>>> print s1, '\n', s2, '\n',  s1==s2
123 
123 
False

tanenn
()

Так.. Вывод строк в файл и просмотр hex редактором выявила что у первой строки двухбайтовая кодировка(0x0074 0x0065 0x0073 0x0074)

Python знаю плохо, как раз разбираюсь с ним, поэтому не подскажете как их привести к одной кодировке? :)

Daeloce
() автор топика
Ответ на: комментарий от Sergey_MSU

Разницы нет для хекс кодов больше равно 10. для кодов от 0 до F идет дополнение ведущим нулем.

tanenn
()
Ответ на: комментарий от Sergey_MSU

формально, для печатных символов этот кусок кода можно убрать. Но если в строке будет непечатные символы типа «\x01», то они отобразятся примерно так «1», а не «01».

tanenn
()
Ответ на: комментарий от tanenn

Не получается... Оба варианта попробовал, как будто вообще ничего не происходит от этих команд...

Daeloce
() автор топика
Ответ на: комментарий от Daeloce

s_unicode.encode(«CP1251»)
unicode(s_windows,«CP1251»)
и т.п.

pacify ★★★★★
()

Проблему решил! Оказалось там не двухбайтовая кодировка, а однобайтовая, но при этом после каждого полезного символа стоит '\x00' после удаления данного мусора все заработало. Всем спасибо.

Daeloce
() автор топика
Ответ на: комментарий от Daeloce

> Проблему решил! Оказалось там не двухбайтовая кодировка, а однобайтовая, но при этом после каждого полезного символа стоит '\x00' после удаления данного мусора все заработало. Всем спасибо.

Да, а теперь задумайтесь еще раз над написанным.

shylent
()
Ответ на: комментарий от Daeloce

>Проблему решил! Оказалось там не двухбайтовая кодировка, а однобайтовая, но при этом после каждого полезного символа стоит '\x00' после удаления данного мусора все заработало.
OMHFG!

anonymous
()
Ответ на: комментарий от Daeloce

> Оказалось там не двухбайтовая кодировка, а однобайтовая, но при этом после каждого полезного символа стоит '\x00' после удаления данного мусора все заработало.

спасибо за хорошее настроение с утра

aho
()
Ответ на: комментарий от anonymous

>любой ананимус подтвердит что utf-8 это мусор :D
UTF-16, тупой анон.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.