Найти - Пользователи
Полная версия: Иероглифы в командной строке
Начало » Python для новичков » Иероглифы в командной строке
1
airhector
Добрый день! Я как новичок столкнулся со следующей проблемой. При написании маленькой программки в Notepad++ создаю файл .py с кодировкой UTF-8. При выполнении программы через “щелчок” по файлу *.py в проводнике, программа выполняется, но в командной строке Windows одни иероглифы вместо кириллицы. В чем может быть проблема?
sp3
консоль windows имеет кодировку cp866, отсюда и ироглифы
print '\n utf8: русский текст'
print '\n cp866: русский текст'.decode('utf8').encode('cp866')
airhector
sp3
консоль windows имеет кодировку cp866, отсюда и ироглифы
print '\n utf8: русский текст'
print '\n cp866: русский текст'.decode('utf8').encode('cp866')

Ок. Это я понял. Какие пути решения можете посоветовать? Может можно сменить кодировку консоли? Или какие-то другие методы.
Вторая строка, которая с .encode и .decode в Python-shell выдает ошибку.
Piton23
ну раз файл сам в utf-8
и вначале прописано
# -*- coding: utf-8 -*-
то могу лишь предположить что вы используйте строки без префикса u''
т.е. не u'русский текст', а просто ‘русский текст’

Как бы там ни было, почему люди должны гадать, выложите скрипт, укажите версию питона, какую ошибку выдает, прям тресбэк сюда.
airhector
В коде не использую “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 для выхода')
Piton23
airhector
В коде не использую “u”
А попробовать использовать не судьба? :)
sanodin
В ком.строке нормально отображает
#-*-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
airhector
Всем спасибо! Работает!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB