Найти - Пользователи
Полная версия: Find в unicode строке
Начало » Python для новичков » Find в unicode строке
1
MaDRuS
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
Андрей Светлов
А что хотелось?
MaDRuS
Просто странно как то индексы х2, пофиг что unicode, перебираться же должны по буковкам,
1:10 вроде должно
o7412369815963
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
Андрей Светлов
MaDRuS

Повторяю (для вас, вероятно, впервые):
1. unicode != utf8
2. utf8, в отличие от юникода, работает с байтами
3. если ascii буквы в utf8 записываются в один байт, то для русских букв это неверно. Длина русской буквы в utf8 занимает два байта. Китайский иероглиф еще длинне.
4. если хотите работать с буквами, а не байтами - используйте unicode
o7412369815963
ну и в довесок: кодировки python для новичков
MaDRuS
Спасибо большое, понял все
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