Как вывести русский текст в консоль?
Что-то я совсем запутался с кодировкой в python, версия стоит 2.7.4 пытаюсь выводить в консоль Windows Привет! на кириллице, а получаю «очень красивый текст». Объясните что к чему?
1 2 3 4
#-*- coding:cp1251 -*- s = "Привет!" print s input()
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вывести в консоль русский текст
Здравствуйте. Я понимаю что тема поднималась не один десяток раз, но все же. Установил.
Вывести русский текст в консоль
Возможно ли и как, выводить на Си(не С++, а именно Си, так как нам не льзя использовать элементы.
Вывести в консоль и псевдографику и русский текст вместе
подскажите пожалуйста как в консоль вывести и псевдографику и русский текст вместе.
Какой директивой в Turbo C вывести на консоль русский текст?
Например в Турбо паскале uses charset; //Не обязательно, только //если компилятор выдаёт ошибку .
Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой.
Как заставить выводить русский текст Python?
Что нужно сделать что-бы в консоль выводилась кириллица?
Для англ. алфавита — работает, а для русского — нет.
__author__ = 'getlucky' # -*- coding: utf-8 -*- def cesarMethod(message): output = [] alphabet = 'abcdefghijklmnopqrstuvwxyz'#'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' steps = int(raw_input('Введите Ваш ключ: ')) for i in message: if i == ' ': output.append(' ') else: pos = alphabet.index(i) + steps if pos >= 25: pos -= 26 output.append(alphabet[pos].decode('utf8')) print 'Зашифрованное сообщение: ', ''.join(output) message = raw_input('Введите Ваше сообщение: ').lower() cesarMethod(message)
- Вопрос задан более трёх лет назад
- 46837 просмотров
2 комментария
Оценить 2 комментария

linux/windows? ошибка/кракозяблы в консоле? python2.7?
hardwellZero @hardwellZero Автор вопроса
Oscar Django: linux, 2.7, скрин — prntscr.com/646fuw
Решения вопроса 1

Лучшая документация — исходники
# -*- coding: utf-8 -*- message = 'ывпавыапавыпвпав' for i in message: print(i)
сравните вывод с
message = u'ывпавыапавыпвпав' for i in message: print(i)
разница всего в одном символе
# -*- coding: utf-8 -*- def cesarMethod(message): output = [] # alphabet = 'abcdefghijklmnopqrstuvwxyz'#'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' alphabet = u'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' # steps = int(raw_input('Введите Ваш ключ: ')) steps = 2 for i in message.decode('utf8'): if i == ' ': output.append(' ') else: pos = alphabet.index(i) + steps if pos >= 25: pos -= 26 output.append(alphabet[pos]) print 'Зашифрованное сообщение: ', ''.join(output) # message = raw_input('Введите Ваше сообщение: ').lower() message = 'специальнодлятостера' cesarMethod(message)
Как вывести в консоль русские символы c выполняемой программы на python?
Чтобы напечатать произвольный текст, используйте unicode тип:
print(u'\u0439')
#XXX DO NOT DO IT print [u'\u0439'.encode('utf-8')] # a bytestring in a list # -> ['\xd0\xb9']
print(list_) в Питоне печатает элементы списка, вызывая repr() функцию для каждого отдельного элемента, аналог: print(«[%s]» % «, «.join(map(repr, list_))) . Подобное текстовое представление хорошо для отладки: оно призвано быть однозначным (во многих случаях eval(repr(obj)) == obj ). См. Чем отличается __repr__ от __str__ ? Чтобы избежать вызова repr() , форматируйте вашу коллекцию вручную.
Чтобы получить человекочитаемый текст, декодируйте байты в том месте где вы их получаете (на границе с внешним миром), где у вас больше информации об их кодировке и передавайте текст внутри программы как unicode тип. Кодируйте текст обратно в байты, используя подходящее представление, только когда необходимо отдать данные (записать на диск, отправить по сети). Это так называемая концепция Unicode sandwich: «decode early, encode late, use Unicode inside».
Обратите внимание, что хотя попытка напечатать байты напрямую может иногда работать, но это может сломаться как только окружение изменится. К примеру, если вы напечатаете байты, которые представляют текст, закодированный в cp1251 кодировке, в окружении ожидающем cp866 кодировку, то вы можете получить кракозябы. Используйте Юникод для работы с текстом в Питоне. Более строгое отношение к смешиванию Unicode текста и байт—это одно из ключевых отличий Python 3 по сравнению с Python 2.
Бывают исключения, когда вашей программе приходится много работать с путями на *nix системе в Питоне 2, тогда удобно рассматривать пути как непрозрачные куки и получать/передавать их обратно системе как есть в виде байт. См. Как работать с путями c русскими символами?
$ PYTHONIOENCODING=utf-8 python -c 'print(u"\u0439")' > output.txt
На Windows, может быть полезен win-unicode-console пакет. См. Как из Python вывести на Windows-консоль строку в Юникоде?
Если вы хотите печатать в тексте самой Питон-программы русские буквы, тогда на Python 2, необходимо явно декларировать используемую кодировку наверху .py файла; и чтобы не приходилось использовать u» префикс для создания строк из констант ( » ) в тексте программы, можно включить unicode_literals :
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import unicode_literals print('Здравствуй, мир!')
Обе опции можно опустить на Питоне 3 (по умолчанию всё работает).
Обратите внимание, что coding: utf-8 (кодировка исходного кода) не имеет никакого отношения к кодировке ввода/вывода—это независимые вещи.
Python-сообщество
![]()
- Начало
- » Python для новичков
- » русский текст в консоли
#1 Март 1, 2016 09:58:59
Leon0x1 Зарегистрирован: 2016-03-01 Сообщения: 14 Репутация: 0 Профиль Отправить e-mail
русский текст в консоли
Здравствуйте. Я только начинаю изучать Phyton. Возникли трудности при выводе простеньких команд на консоль. В одной строке вылазят крякозябры, тогда как в остальных всё нормально. Работаю в Visual Studio 2015 Community, так как привык к этой IDE. Ниже сам код с проблемой:
# -*- coding: utf-8 -*-
a = 70;
b = int (input (‘введите целое число:’))
if b == a:
print (‘поздравляю, вы угадали!’ , ‘Хотя и не получили никакого приза за это’)
elif b < a:
print (‘Нет, введённое число больше’)
elif b > a:
print (‘Нет, введённое число меньше’)
Собственно крякозябры выходят в строке ВВЕДИТЕ ЦЕЛОЕ ЧИСЛО, символы в ней кодируются непонятно в
чём. Я целых два дня искал решение этой проблемы в интернете, но так и не нашёл. Никакие .encode(‘utf-8’) подставляемые в конце строки с разными кодировками не помогают, меняются только крякозябры, но русские буквы упорно не желают выдаваться консолью.
Есть ли вообще решение этой проблемы под Windows? Если кто знает, подскажите пожалуйста начинающему питонисту.
#2 Март 1, 2016 10:32:12
JOHN_16 От: Россия, Петропавловск-Камчатск Зарегистрирован: 2010-03-22 Сообщения: 3292 Репутация: 221 Профиль Отправить e-mail
русский текст в консоли
Версия питона 3?
Сам файл с исходным кодом точно кодирован в заявленные UTF-8 ?
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#3 Март 1, 2016 10:55:43
Leon0x1 Зарегистрирован: 2016-03-01 Сообщения: 14 Репутация: 0 Профиль Отправить e-mail
русский текст в консоли
JOHN_16
Версия питона 3?Сам файл с исходным кодом точно кодирован в заявленные UTF-8 ?
Питон 3.5
Файл с расширением .py автоматически создаётся при создании проекта в Visual Studio и программа к сожалению не указывает в какой кодировке она его создаёт. Я потом в файле в самом начале пишу вот это: # -*- coding: utf-8 -*- и перезапускаю проект. После этого все строки на русском уже в самом файле .py превращаются в крякозябры (значит кодировка меняется), я их удаляю и пишу заново. После этого и консоль все русские строки выводит нормально, кроме первой b = int (input (‘введите целое число:’))
Как я понимаю, строка под input требует какой-то особой кодировки, а может и вообще невозможно её в Питоне 3.5 на русском вывести?
#4 Март 1, 2016 12:47:06
JOHN_16 От: Россия, Петропавловск-Камчатск Зарегистрирован: 2010-03-22 Сообщения: 3292 Репутация: 221 Профиль Отправить e-mail
русский текст в консоли
Пока что делайте перед input отдельный print с приглашением ввести число. А я посмотрю попозже откуда такая проблема.
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#5 Март 1, 2016 18:04:37
Leon0x1 Зарегистрирован: 2016-03-01 Сообщения: 14 Репутация: 0 Профиль Отправить e-mail
русский текст в консоли
JOHN_16
Пока что делайте перед input отдельный print с приглашением ввести число. А я посмотрю попозже откуда такая проблема.
К сожалению интерпретатор не позволяет этого сделать, выдаёт синтаксическую ошибку.
Отредактировано Leon0x1 (Март 1, 2016 18:05:41)
#6 Март 1, 2016 22:02:52
JOHN_16 От: Россия, Петропавловск-Камчатск Зарегистрирован: 2010-03-22 Сообщения: 3292 Репутация: 221 Профиль Отправить e-mail
русский текст в консоли
ну так показывайте код и ошибку. Это же вы ошиблись, а не попытка сделать невозможное
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
