Проблема с кодировкой

283 просмотра
0
0 Комментариев

Добрый день, простой пример подсчёта нужных букв в строке завёл в тупик:

# -*- coding: utf-8 -*-
print " Считаем количество нужных букв в строке"
 
def lcount(string, letter):
    i=c=0
    while i<len(string):
        if string[i] == letter:
            print "%s == %s" % (string[i], letter)
            c+=1
        else:
            print "%s != %s" % (string[i], letter)
        i+=1
    return c
 
s = raw_input("Введите строку: ")
l = raw_input("Введите букву:  ")
res = lcount(s,l)
print res

Результат:

Введите строку: иии
Введите букву:  и
� != и
� != и
� != и
� != и
� != и
� != и

Откуда эти странные вопросики, и что с ними делать?

П.С.: Если вводить не русскую строку, а английскую, то результат считается верно, без ошибок.

Спасибо.


Добавить комментарий

3 Answers

Python Опубликовано 12.12.2018
0

Не по теме и уже поздно, но не смог пройти мимо:

def lcount(string, letter):
    c = 0
    for s in string:
        if s == letter:
            print "%s == %s" % (s, letter)
            c += 1
        else:
            print "%s != %s" % (s, letter)
    return c

Добавить комментарий
0

У вас же строка в utf-8

с = ascii код текущего символа
if (c < 128) // символ как есть
else if( (c > 191) && (c < 224) )
    // символ из двух байт
    // c2 = код следующего символа
    // итоговый код символа ((c & 31) << 6) | (c2 & 63)
else
    // символ из трёх байт
    // c2 = код следующего символа
    // c3 = код третьего символа
    // итоговый код символа ((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63))

Добавить комментарий
0

Лучше всегда работать с юникодом:

s = raw_input("Введите строку: ").decode('utf-8')
l = raw_input("Введите букву:  ").decode('utf-8')

Результат:

 Считаем количество нужных букв в строке
Введите строку: иии
Введите букву:  и
и == и
и == и
и == и
3

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up