Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383

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

09.01.2022, 14:36. Показов 1017. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я не очень хорошо знаю Python, в основном делаю задания на С++. Но данную задачу лучше делать на Python. Необходимо реализовать шифр "Система омофонов", в котором каждой букве ставится в соответствие несколько эквивалентов, число которых пропорционально частоте встречаемости буквы в открытом тексте. Но частоту встречаемости символов можно опустить. Для английского алфавита всё хорошо работает, а вот с заглавными русскими буквами ругается (по заданию нужны русские заглавные буквы). Следующие получаю ошибки:

Code
1
2
3
4
5
6
Traceback (most recent call last):
  File "c:\Users\Egor\OneDrive\Рабочий стол\LR1_6.py", line 41, in <module>
    decryption(start, end)
  File "c:\Users\Egor\OneDrive\Рабочий стол\LR1_6.py", line 26, in decryption
    if table[chr(letter)][i] == code[start:end]:
KeyError: 'À'
Код программы:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
original = list(input("Введите исходное сообщение: ")) 
 
table = { 
"А": ['10','78','45',0], "Б": ['46','25','75',0], "В": ['34','40','09',0], "Г": ['65','76','41',0], "Д": ['56','35','03',0], "Е": ['56','35','03',0],
"Ж": ['02','39','13',0], "З": ['58','62','31',0], "И": ['16','73','71',0], "Й": ['07','52','64',0], "К": ['56','35','03',0], "Л": ['27','44','60',0],
"М": ['67','63','24',0], "Н": ['19','42','53',0], "О": ['74','49','26',0], "П": ['57','70','43',0], "Р": ['56','35','03',0], "С": ['55','32','18',0],
"Т": ['15','36','08',0], "У": ['12','01','48',0], "Ф": ['30','61','77',0], "Х": ['47','21','33',0], "Ц": ['56','35','03',0], "Ч": ['22','04','51',0],
"Ш": ['50','72','28',0], "Щ": ['23','29','05',0], "Ъ": ['69','38','59',0], "Ы": ['68','11','20',0], "Ь": ['56','35','03',0], "Э": ['37','54','14',0],
"Ю": ['37','54','14',0], "Я": ['37','54','14',0]   
} 
 
def encryption(): 
  global code 
  for i in original: 
      if ord(i) >= 192 and ord(i) <= 223: 
          index = table[i][3] 
          code += table[i][index] 
          table[i][3] = (index + 1) % 3 
      else: 
          code += i 
 
def decryption(start, end): 
    global original 
    for letter in range(192, 223): #Проход по ячейкам словаря 
        for i in range(3): #Проход внутри ячеек 
            if table[chr(letter)][i] == code[start:end]: 
                original += chr(letter) 
                decryption(start + 2, end + 2) 
                if end > len(code) - 1: 
                    break 
 
code = "" 
encryption() 
 
print("\n\n=== Произведено шифрование ===") 
print("Зашифрованное сообщение: " + code) 
 
start = 0 
end = 2 
original = "" 
decryption(start, end) 
 
print("\n\n=== Произведено дешифрование ===") 
print("Исходное сообщение: " + original)
Подскажите, пожалуйста, как можно исправить данные ошибки?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2022, 14:36
Ответы с готовыми решениями:

Проблема с русской кодировкой
Народ реально незнаю как исправить Тема такая (опишу в кратце) делаю поиск в файле одного символа , вывожу в лейбл и вуаля выдается...

Проблема с русской кодировкой на буржуйском IIS сервере.
Я разместил свой ASP сайт на амереканском бесплантном сервере. Там я сделал телефонный справочник (на БД ACCESS), но при выводе русских...

Проблема с кодировкой русской строки в алгоритме LZW
Здравствуйте, помогите, пожалуйста, исправить вот проблему с кодированием строки, содержащей символы русского алфавита. Имеется вот...

12
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
09.01.2022, 14:42
Цитата Сообщение от eganator Посмотреть сообщение
KeyError: 'À'
проблема в том, что данного символа у тебя нет в ключах словаря.

Добавлено через 17 секунд
Ну и само собой это не русская А.
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
09.01.2022, 14:57  [ТС]
enx, да, это я понял. Но ведь по таблице аски код 192 это заглавная русская "А".

Добавлено через 3 минуты
enx, такой символ есть в ASCII Win-1252, но мне нужна ASCII Win-1251. И не понятно, как её тут использовать. Ведь с ASCII Win-1252 вряд ли что-то получится.
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
09.01.2022, 15:16
eganator, дай исходный текст, на котором все падает.

Добавлено через 10 минут
eganator, ну и глянул код, переписывать его тебе придется, как только исправишь проблему с тем, почему в качестве ключа словаря появляется буква 'À', появится вторая проблема, с индексами, а потом третья.
0
111 / 74 / 39
Регистрация: 16.05.2020
Сообщений: 292
09.01.2022, 15:21
В какой кодировке исходник?
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
10.01.2022, 10:00  [ТС]
ivikis, UTF-8

Добавлено через 1 минуту
enx, не спорю, что придётся код править. Но сначала бы разобраться с буквой 'À'.
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
10.01.2022, 10:13
Цитата Сообщение от eganator Посмотреть сообщение
Но сначала бы разобраться с буквой 'À'.
ну тогда дам еще намек, после плюсов ты должен это как бы понимать.

Смотрим что у тебя в цикле на 24 строке, и что потом отправляется в запрос на словарь.


Python
1
2
for letter in range(192, 223):
    print(chr(letter))
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
Добавлено через 2 минуты
Смотрим на 26 строку, видим там это ветвление:

Python
1
if table[chr(letter)][i] == code[start:end]:
Вспоминаем, что чтобы отработать условие, оно должно иметь неконфликтующую возможность выполнения.
У тебя идет запрос в словарь по ключу, потом сравнение, в случае, когда в словаре нет соответствующего ключа, выпадет вот это:

Цитата Сообщение от eganator Посмотреть сообщение
KeyError: 'À'
1
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
10.01.2022, 10:16  [ТС]
enx, Да, про то, что отправляется, я знаю. Эти символы в расширенной ASCII 1252 находятся в диапазоне с 192 по 223. И в этом же диапазоне в расширенной таблице ASCII 1251 находятся символы с "А", "Б", "В", ..., "Я". И вот не понятно, как получить именно русские буквы, используя коды ASCII.
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
10.01.2022, 10:16
Лучший ответ Сообщение было отмечено eganator как решение

Решение

Теперь берем и проверяем, а какие же у нас коды в юникоде имеют русские заглавные буквы:

Python
1
print(ord('А'), ord('Я'))
Python
1
1040 1071
Задаем себе вопрос, почему у нас в цикле in range(192, 223)
1
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
10.01.2022, 10:19  [ТС]
enx, Спасибо большое! Нужно было смотреть таблицу юникода, а я совсем не там смотрел...
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
10.01.2022, 10:20
eganator, но это не все, как сказал уже вчера, тебе ожидает еще 2 сюрприза.
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
10.01.2022, 10:22  [ТС]
enx, помню, я их теперь вижу) Буду с ними разбираться. Особенно они заметны в расшифровке.
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
10.01.2022, 10:22
eganator, и на 40 строку посмотреть не забудь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2022, 10:22
Помогаю со студенческими работами здесь

Импорт БД с русской кодировкой
Создал сайт на хостинге, после чего потребовалось перенести его на другой сервер. Всё скопировал, всё работает, но возникла одна проблема....

codeigniter беда с русской кодировкой
Добрый день сделал на codeigniter первый сайт, залил на сервак и вместо русских символов стали знаки вопроса, при том не везде, из базы...

Rails не работает с русской кодировкой
Всем привет, прикрутил Devise, составил свою форму регистрации, при нажатии на кнопку зарегестрироваться, вылетает ошибка ...

Запись данных в MySQL с русской кодировкой.
Что надо настроить или указать в коде, чтобы символы русской кодировки сохранялись корректно в базе? Мой php файл в формате utf-8. В...

Delphi + JSON (опять же трабл с русской кодировкой)
Доброго времени суток. В общем делаю запрос к php который делает выборку из БД. Все понятно. НО! Если англ. символы то все гуд. Если рус....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru