Уведомления

Группа в Telegram: @pythonsu

#1 Июль 3, 2012 09:36:03

airhector
Зарегистрирован: 2012-07-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

Добрый день! Я как новичок столкнулся со следующей проблемой. При написании маленькой программки в Notepad++ создаю файл .py с кодировкой UTF-8. При выполнении программы через “щелчок” по файлу *.py в проводнике, программа выполняется, но в командной строке Windows одни иероглифы вместо кириллицы. В чем может быть проблема?

Прикреплённый файлы:
attachment cmd.JPG (26,0 KБ)

Офлайн

#2 Июль 3, 2012 10:23:48

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

консоль windows имеет кодировку cp866, отсюда и ироглифы

print '\n utf8: русский текст'
print '\n cp866: русский текст'.decode('utf8').encode('cp866')



Офлайн

#3 Июль 3, 2012 12:20:12

airhector
Зарегистрирован: 2012-07-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

sp3
консоль windows имеет кодировку cp866, отсюда и ироглифы
print '\n utf8: русский текст'
print '\n cp866: русский текст'.decode('utf8').encode('cp866')

Ок. Это я понял. Какие пути решения можете посоветовать? Может можно сменить кодировку консоли? Или какие-то другие методы.
Вторая строка, которая с .encode и .decode в Python-shell выдает ошибку.

Офлайн

#4 Июль 3, 2012 13:10:16

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

ну раз файл сам в utf-8
и вначале прописано
# -*- coding: utf-8 -*-
то могу лишь предположить что вы используйте строки без префикса u''
т.е. не u'русский текст', а просто ‘русский текст’

Как бы там ни было, почему люди должны гадать, выложите скрипт, укажите версию питона, какую ошибку выдает, прям тресбэк сюда.

Офлайн

#5 Июль 3, 2012 14:03:45

airhector
Зарегистрирован: 2012-07-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

В коде не использую “u”. Если в консоли Windows оставить дефолт - cp866, то прога работает, но с иероглифами. Если ввести в консоли chcp 65001, то текст отображается, но потом ошибка.
Python 2.7.3 (default, Apr 10 2012, 23:31:26) on win32

#-*-coding: utf-8-*-
import math
#Периметр тр-ка
t=(a,b,c)=input('Введите стороны треугольника через запятую: ')
p = t[0]+t[1]+t[2]
print 'Периметр треугольника равен: ', p
#Площадь тр-ка
polu=float(sum(t))/2
s = math.sqrt(polu*(polu-t[0])*(polu-t[1])*(polu-t[2]))
print 'Площадь треугольника по формуле Герона: ', s
raw_input('Enter для выхода')

Отредактировано airhector (Июль 3, 2012 14:04:31)

Прикреплённый файлы:
attachment cmd2.JPG (47,6 KБ)

Офлайн

#6 Июль 3, 2012 16:20:21

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

airhector
В коде не использую “u”
А попробовать использовать не судьба? :)

Офлайн

#7 Июль 3, 2012 17:44:04

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

В ком.строке нормально отображает

#-*-coding: utf-8-*-
import math
#Периметр тр-ка
t=(a,b,c)=input('\n cp866: Введите стороны треугольника через запятую: '.decode('utf8').encode('cp866'))
p = t[0]+t[1]+t[2]
print '\n cp866: Периметр треугольника равен: '.decode('utf8').encode('cp866'), p
#Площадь тр-ка
polu=float(sum(t))/2
s = math.sqrt(polu*(polu-t[0])*(polu-t[1])*(polu-t[2]))
print '\n cp866: Площадь треугольника по формуле Герона: '.decode('utf8').encode('cp866'), s
raw_input('\n cp866: Enter для выхода '.decode('utf8').encode('cp866'))

Как и сказал sp3

Отредактировано sanodin (Июль 3, 2012 17:47:46)

Офлайн

#8 Июль 4, 2012 07:18:55

airhector
Зарегистрирован: 2012-07-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Иероглифы в командной строке

Всем спасибо! Работает!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version