Как вывести русский текст в python
Перейти к содержимому

Как вывести русский текст в python

  • автор:

Как вывести в консоль русские символы 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?»

Вариант для распечатки Архивированная нить — только для чтения!
Пред. тема | След. тема
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

Столкнулся я со следующей проблемой при работе с Python:
интерпретатор не хочет работать с русским текстом. Например, если мне нужно напечатать «привет», то команда

print («привет»)

не проходит! Компилятор ругается на то, что символы должны быть только ASCII.
Я нашел только один единственый способ решения этой проблемы, но он очень неудобный при написании программ: сперва объявляю строковую переменную, в которой текст пишу в Юникод, а затем вывожу эту переменную с помощью print, применив к переменной метод encode(«koi8-r»)

Это работает, но вводить текст по однй буковке в кодировке Юникод очень утомительно.

Можно еще каким-либо способом работать с русским текстом?

P.S: если эта конференция немного не по теме, то дайте пожалуйста ссылку на какую-нить конференцию, где мне смогут ответить на этот вопрос.

Оглавление

Сообщения по теме

Вероятно локаль не настроена.
Так что man locale

Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.

Как заставить выводить русский текст 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)
  • Вопрос задан более трёх лет назад
  • 47479 просмотров

2 комментария

Оценить 2 комментария

winordie

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

winordie

Лучшая документация — исходники

# -*- 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)

Python-сообщество

[RSS Feed]

  • Начало
  • » 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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *