Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 2, 2014 16:46:11

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag
В консоли ошибка:
'ascii' codec can't decode byte 0xd1 in position 26…

Кодировку правильно указывай decode('utf-8')



Офлайн

#2 Сен. 2, 2014 17:59:30

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

ну как ее можно неправильно указать? все так и указал.
encode-decode – все это пробовал. щас еще немного и за бубном полезу.

что интересно – совсем недавно вот регулярными выражениями очищал код от мусора. та же схема – в input.txt исходник с мусором, в output.txt – чистый код. все было нормально, русский текст сохранен.
что сейчас произошло – я не понимаю.

Отредактировано acme_ag (Сен. 2, 2014 17:59:56)

Офлайн

#3 Сен. 2, 2014 18:12:16

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag
ну как ее можно неправильно указать?

Я не знаю, как ты так указал, что у тебя ‘ascii’ codec can't decode byte

acme_ag
щас еще немного и за бубном полезу.
Достаточно понимать, что и как работает, чтобы делать правильно.



Офлайн

#4 Сен. 2, 2014 18:34:15

malya
От:
Зарегистрирован: 2012-01-11
Сообщения: 49
Репутация: +  1  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
with codecs.open('input.txt', 'r', 'utf-8') as textfile:
    a = [line.strip() for line in textfile]
with codecs.open('output.txt', 'w', 'utf-8') as textfile:
    for line in a:
        textfile.write(line)



Отредактировано malya (Сен. 2, 2014 18:35:29)

Офлайн

#5 Сен. 2, 2014 20:29:30

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

malya
это выдает UnicodeDecodeError: ‘utf8’ codec cant' decode byte 0xf2…
Я так понимаю, у вас все работает как надо. Дело в настройках IDE?


“Решил” проблему так:
#-*-coding:utf8-*-
import codecs
with codecs.open("input.txt") as textfile:
    a = [line.strip() for line in textfile]
file = open('output.txt', 'w')
file.write(str(a))
file.close()
f = codecs.open('output.txt','r', 'string-escape')
k = f.read()
file = open('output1.txt', 'w')
file.write(str(k))
file.close()

В консоли и output.txt:
['\xf2\xe5\xf0\xec\xee\xea\xeb\xe5\xe9 ...']
В консоли и output1.txt все отображается как надо:
['термоклей... ']

Отредактировано acme_ag (Сен. 2, 2014 20:33:58)

Офлайн

#6 Сен. 2, 2014 20:59:00

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag
codecs.open(“input.txt”)
То же самое, что open, потому что ты кодировку не указал.

Можешь не городить столько, а сразу писать
fout.write(str(a).decode('string-escape'))

acme_ag
Дело в настройках IDE?
Нет, просто ты пишешь в файл такой текст:
>>> str(a)
"['\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe\\xd0\\xbe', '\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe', '']"

Интепретатор не понимает, что это байты и не пытается с ними ничего сделать.
И пишет это, как ascii

А так понимает:
>>> str(a).decode('string-escape')
"['\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xbe', '\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xbb\xd0\xbe', '']"



Отредактировано Budulianin (Сен. 2, 2014 21:05:10)

Офлайн

#7 Сен. 2, 2014 21:05:39

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

Budulianin
То же самое, что open
да, осталось от предыдущего. не углядел.

Budulianin
Можешь не городить столько, а сразу писать

спасибо! не догадался.

Офлайн

#8 Сен. 2, 2014 21:09:33

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag

Можешь взять Python3, там нет проблем со string-escape, там везде Unicode.
Но если не будешь понимать, как Python работает с кодировками, то будет много магии.

Лутца тебе нужно почитать.
И Юру послушать.



Отредактировано Budulianin (Сен. 2, 2014 21:12:08)

Офлайн

#9 Сен. 2, 2014 21:30:18

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

Я Лутца как раз сейчас читаю (Изучаем Python, 4).
Python 2 сознательно выбирал, т.к. много где писалось, что 3 пока еще молодой, не оброс библиотеками, с 2. на котором написано гораздо больше, плохо совместим. Возможно, не стоило.
За видео – спасибо. Посмотрю.

Офлайн

#10 Сен. 2, 2014 21:36:50

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag
что 3 пока еще молодой
Брехню читал. Python2 ужё мёртвый.
Про Python3 эта инфа уже неактуальна.



Отредактировано Budulianin (Сен. 2, 2014 22:41:05)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version