Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2007 09:05:12

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

ActivePython 2.5, WinXP
При исполнении консольных скриптов иногда на консоль (cmd.exe) выдаются ошибки кракозябрами, типа:

pywintypes.com_error: (-2147221020, ‘\xd1\xe8\xed\xf2\xe0\xea\xf1\xe8\xf7\xe5\xf1\xea\xe0\xff \xee\xf8\xe8\xe1\xea\xe0’, None, None)
Как это расшифровать (интересует способ, а не конкретный текст)?



Офлайн

#2 Июль 13, 2007 11:04:20

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

Перехвати исключение и выведи его текст.

try:
# some code goes here
except pywintypes.com_error, e:
    print e.message.decode('cp1251').encode('cp866')



Офлайн

#3 Июль 13, 2007 12:30:53

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

Нет, так не получается. Например:

# -*- coding: cp1251 -*-
import pywintypes, win32com.client
try:
conn = win32com.client.Dispatch("какая-то глупость")
except pywintypes.com_error, e:
print e.message.decode('cp1251').encode('cp866')
Не выводит ничего. В то же время, если не обрабатывать ошибку, какие-то кракозябры выводятся (их то и хочется прочитать).



Офлайн

#4 Июль 13, 2007 13:44:33

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

а у меня дает такую ошибку на сам print:

AttributeError: com_error instance has no attribute ‘message’



Офлайн

#5 Июль 13, 2007 13:46:41

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

а вот так работает, правда у меня Python 2.4:


import pywintypes, win32com.client
try:
conn = win32com.client.Dispatch(“какая-то глупость”)
except pywintypes.com_error, e:
print e.decode('cp1251').encode('cp866')



Офлайн

#6 Июль 13, 2007 13:47:00

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

Посмотри пример обработки ошибок pywintypes.com_error здесь.



Офлайн

#7 Июль 13, 2007 15:43:48

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

bialix
а вот так работает, правда у меня Python 2.4:


import pywintypes, win32com.client
try:
conn = win32com.client.Dispatch(“какая-то глупость”)
except pywintypes.com_error, e:
print e.decode('cp1251').encode('cp866')
Да, это реально работает :). Спасибо!



Офлайн

#8 Июль 13, 2007 20:58:00

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

Что всё же означают такие кракозябры? Если это коды символов, то каких?



Офлайн

#9 Июль 13, 2007 21:39:58

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

это CP1251 – дефолтная кодировка на русской винде.



Офлайн

#10 Июль 13, 2007 22:09:36

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование кракозябров в текст

Похоже на “синтаксическая ошибка”…



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version