Как получить символ строки для использования его в коде?

Здравствуйте.

Есть некий код на питоне:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name = raw_input()  # пользователь вводит на русском языке, на выходе получаем строку

print name[0]  # хочу получить первый символ строки, однако консоль выдает символ неправильной кодировки
print name  # хотя таким образом, выводит строку так, как и ввел пользователь


� - вот так выводит консоль

При использовании введённой строки полностью, в коде, операции выполняются корректно:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Цифра и соответствующие ей символы
char_list = [
        [1, 'аисъ'],
        [2, 'бйты'],
        [3, 'вкуь'],
        [4, 'глфэ'],
        [5, 'дмхю'],
        [6, 'енця'],
        [7, 'ёоч'],
        [8, 'жпш'],
        [9, 'зрщ']
        ]

name = raw_input()  # вводим в ниж. регистре кириллицей
# ... еще ввод...
a = [name, ...]  # вношу полученные переменные в список

def number(word):  # Сумма цифр соответствующих символам строки, на выходе, до однозначного вида (7 напр.)
    num = 0
    for char in word:
        for i in char_list:
            if char in i[1]:
                num += i[0]
    if num % 9 == 0:
        return 9
    else:
        return num % 9

def full_name(ls):  # полученные суммы на выходе в виде списка ([2, 4, 5, ...] например)
"""
ls - <list> слов полученных путем raw_input
"""
    full_nm = []
    total = 0
    for i in ls:
        full_nm.append(number(i))
    for d in full_nm:  # сумма элементов списка до однозначного числа(3 напр.) и добавление в конец этого списка
        total += d
    if total % 9 == 0:
        full_nm.append(9)
    else:
        full_nm.append(total % 9)
    return full_nm

print full_name(a)


Что нужно дописать чтобы print name[0] не выводил �, а выводил "в" например.
Вроде это связанно с кодировкой, но справиться самостоятельно не получилось. Менял # -*- coding: utf-8 -*- на # coding: utf-8 и добавлял в начало:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

... не помогло.

Благодарю за внимание.
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
smolin_is
@smolin_is Автор вопроса
Благодарю вас за отклик. Проблема решилась путём:

name = raw_input().decode(encoding="utf-8")

Строка оказалась в виде bytes, почему так получилось, пока не разобрался. То ли код прочитался как python 2.x, то ли python 3.x, или какая другая причина. В общем пошёл искать ответ. Если кто может упростить ситуацию и изложить тонкость нового вопроса, буду очень признателен :)

Код прочитался как python 2.x. Но всё равно не понял почему не обрабатывался код, ведь всё было в одном стандарте byte, а декодирования до селе не использовалось.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@andrey_ado
raw_input(encode('cp866'))
Ответ написан
Это возможно связано с тем что индексирование символов обрезает длинну буквы. Попробуй-те проитерировать строку и вывести содержимое через foreach
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы