Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 3, 2013 10:13:54

Tim32
Зарегистрирован: 2012-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

Здравствуйте. Тема избитая, но в поиске что то объясняющее данное явление ничего не нашел.

filename = 'AjaraTV.pdt'
data = open(filename,'rb').read()
print data
for i in data:
    print i

Первый print выводит только латиницу, а вместо кириллицы пустоту (пробелы).
Второй print побуквенно выводит весь файл. При этом русские символы печатаются, как и английские.

Почему так происходит? Заранее благодарю.

Офлайн

#2 Янв. 3, 2013 11:09:37

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

Режим чтения с rb на r смените.



Офлайн

#3 Янв. 3, 2013 14:12:00

Tim32
Зарегистрирован: 2012-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

mironich
Режим чтения с rb на r смените.

Не помогает. Так и первый и второй print печатают только английские символы.

Офлайн

#4 Янв. 4, 2013 09:48:14

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

Вывод print (Опять кодировки)

print data.decode("исходная кодировка").encode("кодировка устройства")
“исходная кодировка” - у вас кодировка файла, например, utf8 или cp1252, смотрите сами
“кодировка устройства” - куда печатаете. Если это консоль русской винды - cp866

Что тут сложного?



Офлайн

#5 Янв. 4, 2013 10:47:34

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Вывод print (Опять кодировки)

для чтения из файла в нужной кодировке, есть функция codecs.open



Офлайн

#6 Янв. 4, 2013 13:16:38

Tim32
Зарегистрирован: 2012-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

sp3

Печатаю в консоль GUI. То что вы сказали не объясняет почему в одно случае печатаются символы, а другом нет.

Офлайн

#7 Янв. 6, 2013 21:50:45

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

Очень интересный пример, на самом деле.
Скажите, в какой кодировке файл и в какой кодировке ожидается текст в GUI?



Офлайн

#8 Янв. 7, 2013 08:40:50

Tim32
Зарегистрирован: 2012-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

ZAN
Очень интересный пример, на самом деле.Скажите, в какой кодировке файл и в какой кодировке ожидается текст в GUI?

Поправочка. В консоль все печатается прекрасно. GUI PyScripter. Я не не знаю какая у него кодировка. А как понять в какой кодировки файл? Я его не записывал. Формат файла pdt. Hex редактор нормально показывает его при выборе кодировки Default ANSI (Что как я понимаю обычный ASCII, так ведь?)

Офлайн

#9 Янв. 7, 2013 10:17:33

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

Судя по всему, это баг PyScripter-а в перехватывании stdout. Но что именно там происходит, трудно сказать.
Что касается определения кодировки - можно открыть файл браузером и переключать кодировки, пока кириллица не отобразится нормально или воспользоваться замечательной библиотекой chardet.
Что касается ANSI, то это не совсем ASCII, однако ни в той, ни другой кодировке нет кириллических символов.



Офлайн

#10 Янв. 8, 2013 09:27:32

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Вывод print (Опять кодировки)

ZAN
Судя по всему, это баг PyScripter-а в перехватывании stdout.
Лучше сказать “фича”, в eclipse что-то подобное, я так понял, что при запуске через окружение передаются спец. настройки - кодировка, пути и пр.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version