Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2010 19:47:51

MaDRuS
От:
Зарегистрирован: 2010-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Find в unicode строке

Python 2.6
Немного не понимаю почему выдается такой индекс найденного фрагмента (1 : 21), причем строку берет правильно :

my.txt -utf8 кодировка

f=open('my.txt','r')
dict=f.read()
f.close()
print dict[0:50]
begin=0
end=0
begin=dict.find('{',end)+1
end=dict.find('}',begin)
print dict[begin:end],'|\t',begin,':',end
Выдается результат:
{регулярный}{выражение}{вик
регулярный | 1 : 21



Офлайн

#2 Ноя. 17, 2010 20:55:22

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Find в unicode строке

А что хотелось?



Офлайн

#3 Ноя. 17, 2010 21:07:43

MaDRuS
От:
Зарегистрирован: 2010-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Find в unicode строке

Просто странно как то индексы х2, пофиг что unicode, перебираться же должны по буковкам,
1:10 вроде должно



Отредактировано (Ноя. 17, 2010 21:08:22)

Офлайн

#4 Ноя. 17, 2010 21:50:35

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

Find в unicode строке

MaDRuS
Просто странно как то индексы х2, пофиг что unicode, перебираться же должны по буковкам,
1:10 вроде должно
напиши входной файл без русских букв, будет тебе 1:10.

ты в коде оперируешь с utf8, переведи его в unicode
f=open('my.txt','r')
dict=f.read().decode('utf8')
f.close()
print dict[0:50]
begin=0
end=0
begin=dict.find(u'{',end)+1
end=dict.find(u'}',begin)
print dict[begin:end],u'|\t',begin,u':',end

Офлайн

#5 Ноя. 17, 2010 22:44:45

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Find в unicode строке

MaDRuS

Повторяю (для вас, вероятно, впервые):
1. unicode != utf8
2. utf8, в отличие от юникода, работает с байтами
3. если ascii буквы в utf8 записываются в один байт, то для русских букв это неверно. Длина русской буквы в utf8 занимает два байта. Китайский иероглиф еще длинне.
4. если хотите работать с буквами, а не байтами - используйте unicode



Офлайн

#6 Ноя. 18, 2010 16:55:10

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

Офлайн

#7 Ноя. 18, 2010 18:00:07

MaDRuS
От:
Зарегистрирован: 2010-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Find в unicode строке

Спасибо большое, понял все



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version