Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 24, 2012 14:21:37

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблема с кодировкой в PyDev

Мой python модуль в кодировке cp1251. Работает если запускать из PyDev,
но не работает, если просто запустить модуль из cmd.
Видает ошибку:
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xc7 in position 73: ordinal not in range(128)

Так в чем же отличие запуска из PyDev и из cmd ?

Попробовал поменять в модуле site.py encoding c “ascii” на “cp1251”

def setencoding():
    """Set the string encoding used by the Unicode implementation.  The
    default is 'ascii', but if you're willing to experiment, you can
    change this."""
    encoding = "ascii" # Default value set by _PyUnicode_Init()
    if 0:
        # Enable to support locale aware default string encodings.
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    if 0:
        # Enable to switch off string to Unicode coercion and implicit
        # Unicode to string conversion.
        encoding = "undefined"
    if encoding != "ascii":
        # On Non-Unicode builds this will raise an AttributeError...
        sys.setdefaultencoding(encoding) # Needs Python Unicode build !
Работает!
Но возникает вопрос: где в PyDev хранятся эти настройки кодирования?
И можно ли изменить encoding на “cp1251” во время исполнения моего модуля не изменяя site.py ?



Отредактировано vkopey (Апрель 24, 2012 14:50:17)

Офлайн

#2 Апрель 24, 2012 17:36:37

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Проблема с кодировкой в PyDev

1)Правой кнопкой мыша на проекте - клац!

2)

Отредактировано helm2004 (Апрель 24, 2012 17:38:08)

Офлайн

#3 Апрель 24, 2012 21:30:12

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблема с кодировкой в PyDev

Спасибо, helm2004.
Нарил в инфу, поэтому отвечу на свой вопрос о смене кодировки sys:

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8') 
print sys.getdefaultencoding() # будет 'utf-8', а не 'ascii'
Не понимаю почему по умолчанию стоит ‘ascii’, а не ‘utf-8’ ?
Дискриминация неанглоязычных? :)



Офлайн

#4 Апрель 24, 2012 23:29:55

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Проблема с кодировкой в PyDev

Из блога в блог кочует рецепт с sys.setdefaultencoding... Рецепт, между прочим, некорректный. Догадайтесь, когда он будет работать неверно. Что setdefaultencoding делает и, главное, чего она не делает?



Офлайн

#5 Апрель 24, 2012 23:49:43

beelze
Зарегистрирован: 2012-04-11
Сообщения: 104
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблема с кодировкой в PyDev

все же стоит потратить 10 минут и внимательно прочесть один раз UNICODE HOWTO. В дальнейшем не придется решать юникодные проблемы методом тыка.

Офлайн

#6 Апрель 25, 2012 04:21:42

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проблема с кодировкой в PyDev

vkopey
за такое решение нужно по рукам бить=) В исходники лезть что бы кодировку сменить..да вас в соответствующий зал славы поставить можно.

vkopey
the string encoding used by the Unicode implementation
Вот это вас ну никак не насторожило?

vkopey
Мой python модуль в кодировке cp1251
vkopey
# -*- coding: utf-8 -*-
Че к чему …. сами должны догадаться видимо.

vkopey
import sys reload(sys)
Это что еще за мракобесие?

beelze
внимательно прочесть один раз UNICODE HOWTO
В обязательном порядке, что бы знать.


Ну и напоследок:
Вы изначально должны ориентироваться на работоспособность кода просто выполняя скрипт в командной строке - все остальное вторично. И да ..PyDev та еще ..забавная штука - не антиреклама, сам использую.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Апрель 25, 2012 04:26:51)

Офлайн

#7 Апрель 25, 2012 08:50:20

beelze
Зарегистрирован: 2012-04-11
Сообщения: 104
Репутация: +  3  -
Профиль   Отправить e-mail  

Проблема с кодировкой в PyDev

>Это что еще за мракобесие?
традиционный прием - контрольный выстрел

ну и для того, чтобы ТС не наступил еще на одни популярные, но не всем известные грабли:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\zzz>chcp
Active code page: 866

тут подробно написано про это

Отредактировано beelze (Апрель 25, 2012 09:00:26)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version