Как сделать вывод и хранение строк на русском языке в python?

Рейтинг: -1Ответов: 3Опубликовано: 16.01.2023

я пытался менять кодировки (866, 1251, utf), ничего не помогает, при первом же запуске вижу в консоли всем известную картину. я использую vs code, возможно дело в ней.

char_literals = []

for i in range(128, 256):
    char_literals.append(chr(i))

print(char_literals)

Ответы

▲ 2

Вам собственно даже и не нужно знать коды символов и "зашивать" их в код, вы можете их получить программно через функцию ord, "обратную" к функции chr. Попробуйте так:

char_literals = []

for i in range(ord('А'), ord('я')+1):
    char_literals.append(chr(i))

print(char_literals)

P.S. Вам уже написали в комментариях, я поэтому не стал повторять, но, видимо, надо было. В том диапазоне, в котором вы пытаетесь печатать кириллические символы, их нет, диапазон другой. Таблица ASCII была ещё в MS-DOS, а в современных системах используются UTF-8, CP1251. В виндовой консоли ещё используется CP866, она частично похожа на ASCII, но тоже не совсем.

▲ 1

Если делать через цикл с декодированием кодировкой cp1251 (или другой однобайтовой кодировкой, например cp866), то нужно сконвертировать каждое число в одиночный байт, потом его декодировать нужной кодировкой:

char_literals = []

for i in range(128, 256):
    char_literals.append(i.to_bytes(1, "little").decode("cp1251", errors="replace"))

print(char_literals)

Вывод:

['Ђ', 'Ѓ', '‚', 'ѓ', '„', '…', '†', '‡', '€', '‰', 'Љ', '‹', 'Њ', 'Ќ', 'Ћ', 'Џ', 'ђ', '‘', '’', '“', '”', '•', '–', '—', '�', '™', 'љ', '›', 'њ', 'ќ', 'ћ', 'џ', '\xa0', 'Ў', 'ў', 'Ј', '¤', 'Ґ', '¦', '§', 'Ё', '©', 'Є', '«', '¬', '\xad', '®', 'Ї', '°', '±', 'І', 'і', 'ґ', 'µ', '¶', '·', 'ё', '№', 'є', '»', 'ј', 'Ѕ', 'ѕ', 'ї', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']

Но вообще можно сразу весь range преобразовать в набор байт, декодировать нужной кодировкой (получится строка), потом при необходимости преобразовать в список:

char_literals = list(bytes(range(128, 256)).decode("cp1251", errors="replace"))

print(char_literals)
▲ 0

Предлагаю два варианта решения данной проблемы:

  1. Использовать версию Vs Code, старше 2019 года.
  2. Использовать PyCharm бесплатную версию "Community" (в PyCharm таких проблем я не встречал).