35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 209
1

Ошибка вывода: codec can't decode

23.01.2015, 08:25. Показов 13975. Ответов 16
Метки нет (Все метки)

Приветствую всех!
Такая проблема: При попытке вывести знак градуса "°" появляется ошибка.
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
Код такой:
Python
1
2
3
4
5
6
7
8
9
10
# -*- coding: utf-8 -*-
import time
import re
import lxml.html
import requests
import urllib
import string
...............................
temperature = xmldoc.getElementsByTagName('TEMPERATURE')    # температура
print ('Температура'+temperature[0].attributes['min'].value+" "+temperature[0].attributes['max'].value+'°')
Как это побороть?
Спасибо!
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2015, 08:25
Ответы с готовыми решениями:

Ошибка Pyglet UnicodeDecodeError: 'ascii' codec can't decode
Здравствуйте. У меня у проблема с pyglet (каркас для графики и т.п.). Версия Python 2.7.3. ОС:...

UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 - invalid start byte
Добрый день При вызове скрипта вылетает такая ошибка: "UnicodeDecodeError: 'utf8' codec can't...

UnicodeDecodeError: 'utf-8' codec can't decode byte
Задача: в файле product.csv с товарами вида №;Наименование;Магазин;Стоимость, вывести информацию,...

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed
Привет всем! При компиляции скрипта в ехе вышла такая ошибка,пытался найти символ-не вышло....

16
Эксперт Python
4606 / 2027 / 359
Регистрация: 17.03.2012
Сообщений: 10,085
Записей в блоге: 6
23.01.2015, 10:54 2
Говорю для винды, для линукса не в курсе.
Для вывода в консоль надо перекодировать юникодную строку в ту кодировку, в которой она отображает. То есть, в случае винды - 'cp1251'.
Python
1
print '...'.encode('cp1251')
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
23.01.2015, 11:21 3
Python
1
2
3
4
5
6
7
# encoding: utf8
from xml.dom import minidom
 
xmldoc = minidom.parse("weather.xml")
 
temperature = xmldoc.getElementsByTagName('TEMPERATURE')  # температура
print('Температура {} {} °'.format(temperature[0].attributes['min'].value, temperature[0].attributes['max'].value))
Добавлено через 8 минут
P.S У тебя столько библиотек импортировано и ни одна в этом куске кода не используется, вот та библиотека которая реально должна тут присутствовать, её нет! Нехорошо так делать.
1
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 209
23.01.2015, 12:25  [ТС] 4
tsar925, Второй раз за сутки выручаешь, СПАСИБО!
А остальные библиотеки импортируются для остального кода пытаюсь заменить LUA+Cairo код своими, новоприобретаемыми познаниями в питоне

Добавлено через 2 минуты
dondublon, Тобе тоже спасибо!
Только локаль другая, я более или менее могу писать регэксп в линухе и понимаю, но прочие выключены системно(кроме koi-8r)

Добавлено через 2 минуты
tsar925, А в чем в данном случае смысл фигурных скобок? Почему не проходит стандартный вывод с обычными и квадратными? В справочнике найти не могу
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
23.01.2015, 13:10 5
Цитата Сообщение от Delvin-fil Посмотреть сообщение
А в чем в данном случае смысл фигурных скобок?
Прочитай эту статью http://pythonworld.ru/osnovy/f... ormat.html ну или ещё погугли про форматирование строк и метод format. Сразу все поймёшь.

Цитата Сообщение от Delvin-fil Посмотреть сообщение
Почему не проходит стандартный вывод с обычными и квадратными?
То, что у тебя до этого было, это называется конкатенация строк, этот метод во 1 много ресурсов съедает и во 2 он мене наглядный и путает код, делая его менее читаемым.
0
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 209
23.01.2015, 13:31  [ТС] 6
tsar925, Смысл понял, буду тренироваться! Спасибо!
Ибо основные цели у меня как раз в области парсинга.
Скачал книгу(хоть и так не много проблем с этим) "Регулярные выражения Джеффри Фридл", это поможет в освоении?
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
23.01.2015, 13:40 7
Цитата Сообщение от Delvin-fil Посмотреть сообщение
основные цели у меня как раз в области парсинга.
Парсить нужно с использованием специальных библиотек, на пример lxml (небольшие примеры ты уже видел). Использовать регулярки в этом деле это значит самому себе вставлять палки в колёса. Их можно использовать, но только где это действительно нужно (это не так часто бывает).

Добавлено через 2 минуты
Прочитав книгу ты узнаешь кучу всего крутого, но когда это тебе понадобится не знаю.
Я для себя решил, что регулярки применяю не каждый день и тратить время на прочтение целой книги это слишком. Прочитал 2 статьи на хабре, понял основу, а дальше уже если чего-то не знаю ищу и изучаю по мере надобности.
http://habrahabr.ru/post/115825/
0
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 209
23.01.2015, 13:41  [ТС] 8
На хабре я зареган, но в основном смотрю DIY
И еще, есть один нюанс. Пишу в SublimeText 2 - он игнорирует python3 и выше. Пришлось ставить "чистый" 2.7.
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
23.01.2015, 13:47 9
Подытожу свои мысли одной цитатой, отражающей смысл всего выше сказанного:
Цитата Сообщение от Джэйми Завински
Некоторые люди, сталкиваясь с проблемой, думают: «О, я воспользуюсь регулярными выражениями».
Теперь у них две проблемы.
Добавлено через 3 минуты
Цитата Сообщение от Delvin-fil Посмотреть сообщение
Пишу в SublimeText 2 - он игнорирует python3 и выше.
SublimeText - это первое, что я попробовал в начале своего изучения, блокнот очень хороший, но для разработки постоянной не годится.
Я сам сейчас уже долгое время пользуюсь pycharm и тебе его советую.

По поводу версии python:
Я предпочитаю пользоваться python 3, там много плюшек всяких, которые иногда могут пригодиться, к тому-же там дела с многопоточностью лучше обстоят. По этому рекомендую поставить тройку.

Добавлено через 53 секунды
Цитата Сообщение от Delvin-fil Посмотреть сообщение
И еще, есть один нюанс. Пишу в SublimeText 2 - он игнорирует python3 и выше. Пришлось ставить "чистый" 2.7.
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
Кстати вот это все к чему вообще было сказано?
0
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 209
23.01.2015, 13:48  [ТС] 10
tsar925, Насчет специальных библиотек.
Разбирался сам с http://informer.gismeteo.ru/xml/99845.xml.
Часть кода:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import lxml.html
import requests
import urllib
from Tkinter import *
 
url=("http://informer.gismeteo.ru/xml/99845.xml")
html1=urllib.urlopen(url)
page=html1.read()
fh=open('99845.xml','w')
fh.write(page)
fh.close()
# Получаем картинку
 
page = requests.get('http://www.gismeteo.ru/city/daily/11835/').text
parser = lxml.html.fromstring(page)
weather = parser.cssselect('dl.cloudness dt.png')[0]
url = re.findall('\((.*)\)', weather.get('style'))[0]
title = weather.get('title')
#print(url)
 
 
#from urllib.request import urlopen
url1=(url)
html1=urllib.urlopen(url1)
page=html1.read()
fh=open('icon.png','w')
fh.write(page)
fh.close()
 
 
#root = Tk()
#im = PhotoImage(file='icon.png')
#l = Label(root, image=im)
#l.pack()
#root.mainloop()
 
 
# Обрабатываем 
from xml.dom import minidom
xmldoc = minidom.parse('99845.xml')
forecast = xmldoc.getElementsByTagName('FORECAST')          # информация о сроке 
temperature = xmldoc.getElementsByTagName('TEMPERATURE')    # температура
phenomena = xmldoc.getElementsByTagName('PHENOMENA')    # атмосферные явления
pressure = xmldoc.getElementsByTagName('PRESSURE')      # давление
wind = xmldoc.getElementsByTagName('WIND')          # ветер
relwet = xmldoc.getElementsByTagName('RELWET')      # влажность
print ('${offset -130}${alignc}${font zekton:size=20:bold}${color red}'+temperature[0].attributes['min'].value+" "+temperature[0].attributes['max'].value+'${font}${color ffffff}')
phen = phenomena[0].attributes['cloudiness'].value
if phen == "0":
    print ("${alignc}Ясно")
elif phen == "1":
    print ("${alignc}Малооблачно")
elif phen == "2":
    print ("${alignc}Облачно")
elif phen == "3":
    print ("${alignc}Пасмурно")
prec = phenomena[0].attributes['precipitation'].value
if prec == "4":
    print ("${alignc}Дождь")
elif prec == "5":
    print ("${alignc}Ливень")
elif prec == "6":
    print ("${alignc}Снег")
elif prec == "7":
    print ("${alignc}Снег")
elif prec == "8":
    print ("${alignc}Гроза")
elif prec == "9":
    print ("${alignc}Нет данных")
elif prec == "10":
    print ("${alignc}Без осадков")
print ("${alignc}Давление"), (pressure[0].attributes['max'].value),("мм.р.с")
print ("${alignc}Влажность "), (relwet[0].attributes['min'].value+"%")
print ("${alignc}Ветер"), (wind[0].attributes['max'].value), ("м.с.")
#-------------------------
wind1 = wind[0].attributes['direction'].value
if wind1 == "0":
    print ("${alignc}Северный")
elif wind1 == "1":
    print ("${alignc}Северо-восточный")
elif wind1 == "2":
    print ("${alignc}Восточный")
elif wind1 == "3":
    print ("${alignc}Юго-восточный")
elif wind1 == "4":
    print ("${alignc}Южный")
elif wind1 == "5":
    print ("${alignc}Юго-западный")
elif wind1 == "6":
    print ("${alignc}Западный")
elif wind1 == "7":
    print ("${alignc}Северо-западный")
Это для conky.
Работает хорошо.(и наконец-то "цепляет" правильную иконку благодаря тебе)
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
23.01.2015, 13:53 11
Код ужас конечно, учись сразу писать нормально. Для этого обязательно прочти http://pythonworld.ru/osnovy/p... ython.html

Добавлено через 1 минуту
P.S Все, что ты написал можно уменьшить примерно в 2, если не в 3.

Добавлено через 1 минуту
По поводу графики кстати, вижу ты пытался написать gui. Сразу могу посоветовать: "Не берись за tkinter, это кривая дорожка, которая ведёт тебя в мир мук и написания множества велосипедов. Посмотри в сторону pyqt."
0
35 / 33 / 19
Регистрация: 22.01.2015
Сообщений: 209
23.01.2015, 13:56  [ТС] 12
tsar925, Про "ужас" не спорю Ты бы видел мои первые проги(лет 25 назад) на assembler'е, когда понятия о макро, стек и иже с ними не имел. А как pascal "обрастал" ненужным - жуть!!!
Буду учиться. Спасибо!
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
23.01.2015, 13:59 13
Кстати ещё по поводу SublimeText. Использовать старую версию Python, только из-за того, что какой-то там блокнот не знает синтаксиса новой версии мне кажется как минимум глупо.
0
0 / 0 / 0
Регистрация: 08.03.2014
Сообщений: 4
13.02.2015, 22:01 14
Здравствуйте. У меня у проблема с pyglet (каркас для графики и т.п.). Версия Python 2.7.3. Пример из документации.
Python
1
2
3
4
5
6
7
8
9
10
11
12
# coding: utf-8
import pyglet
 
window=pyglet.window.Window()
label=pyglet.text.Label(u'Hello, World', font_name=u'Times New Roman', font_size=36, x=window.width//2, y=window.height//2, anchor_x=u'center', anchor_y=u'center')
 
@window.event
def on_draw():
    window.clear()
    label.draw()
 
pyglet.app.run()
Выдаёт исключение:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Traceback (most recent call last):
  File "/home/vitalik/Документы/python/123.py", line 26, in <module>
    window=pyglet.window.Window()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 166, in __init__
    super(XlibWindow, self).__init__(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/__init__.py", line 559, in __init__
    self._create()
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 356, in _create
    self.set_caption(self._caption)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 514, in set_caption
    self._set_text_property('WM_NAME', caption, allow_utf8=False)
  File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 788, in _set_text_property
    buf = create_string_buffer(value.encode('ascii', 'ignore'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 14: ordinal not in range(128)
Можете объяснить, что не так? Заранее извиняюсь за беспокойство.
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
13.02.2015, 22:06 15
В пути к файлу не должно быть папок с названных кириллицей, перемести файл на пример на С. И запомни на будующие, что нужно новую тему создавать, а не гадить в старых.

Добавлено через 56 секунд
P.S и вообще пересаживайся лучше на тройку.
0
0 / 0 / 0
Регистрация: 08.03.2014
Сообщений: 4
13.02.2015, 22:10 16
На всякий случай ОС: Linux Mint 13 Maya (Ubuntu 12.04 LTS)
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
13.02.2015, 22:22 17
Цитата Сообщение от Хомяк87 Посмотреть сообщение
На всякий случай ОС: Linux Mint 13 Maya (Ubuntu 12.04 LTS)
Ну я не полностью путь прочёл, а ты мог бы не тупить и просто молча кинуть в корень home, что не понятного то? Написал, же, что не должно быть в пути папок названия которых написаны на кириллице.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2015, 22:22
Помогаю со студенческими работами здесь

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 1-2: truncated \uXXXX escape
Добрый день! Начал изучать устройство Python по книге Мэт Харрис &quot;Как устроент Python&quot;. Дошел до...

'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Работаю с библиотеками PIL и telebot В чем может быть проблема ? Ошибка - 'utf-8' codec can't...

При добавлении в шаблон русского текста выдаёт "'utf8' codec can't decode byte 0xf8"
Здравствуйте! При добавлении в шаблон текста на русском получаю ошибку UnicodeDecodeError at...

DjangoUnicodeDecodeError: 'utf8' codec can't decode
Здравствуйте, уважаемые форумчане. Необходима помощь в решении проблемы кодировки. В заголовке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru