Найти - Пользователи
Полная версия: проблема с кодировкой: текст из файла в список
Начало » Python для новичков » проблема с кодировкой: текст из файла в список
1 2 3
acme_ag
Есть текстовый файл с набором строк. Текст на русском, что-то типа такого:

Строка один
Строка два
Строка три
...

Нужно преобразовать контент в список и сохранить в другой файл.
С текстом на латинице все в порядке. С кириллицей получить на выходе текст на русском не получается – выходит что-то такое:

клей полиграфия

Код
with open("input.txt", "r") as textfile:
    a = [line.strip() for line in textfile]
file = open('output.txt', 'w')
file.write(str(a))
file.close()

Кодировка сбивается на этапе .strip()
Пробовал задействовать codecs, менять кодировку исходного файла, с IDE, без IDE… Инет читал.

Поскольку я новичок в Python, просьба не просто бросить ссылку на мануал (или еще куда-то), а объяснить, как решать такие проблемы.
Alen
Какая кодировка в исходном файле? Какая операционая система?
Строчка, подобная этой, в начале файле скрипта присутствует?
#-*-coding:utf8-*-
Budulianin
acme_ag
Кодировка сбивается на этапе .strip()
В приложении, мы работаем только с Unicode.
Если Python2, то следуй PEP 263, сообщай о кодировке интерпретатору: #-*-coding:utf8-*-

acme_ag
как решать такие проблемы.
Пришёл текст в приложение, декодировал в Unicode, поработал с ним,
нужно сохранить\передать, закодировал и сохранил\передал дальше.
acme_ag
Win7, python 2.7.6, использую PyScripter/notepad++/Sublime text2

#-*-coding:utf8-*- – это указывал.
В исходнике были utf-8 w/o BOM, utf-8, ansi…. да в какой-то момент я просто пробовал все подряд. Создавал пустой файл в utf-8 и вручную вписывал тестовый текст. Использовал notepad, notepad++, эксель (я уже говорил, что использовал все подряд?).
На выходе либо это
['\xd1\x82\xd0\xb5\xd1\x80\... ']
либо это
клей полиграфия
в зависимости от манипуляций с .codecs()
Budulianin
acme_ag
На выходе либо это

Где на выходе? в консоли ?

acme_ag
['\xd1\x82\xd0\xb5\xd1\x80\... ']
Это нормальное отображение в интерактивной оболочке.
acme_ag
клей полиграфия
А это, значит, что у тебя консоль не настроена под нужную кодировку.
acme_ag
и в консоли, и в output.txt
Budulianin
acme_ag

Попробуй создать файл в utf-8
прописать там #-*-coding:utf8-*- первой строкой, прописать строку s = u'русские буквы'
закодировать строку в utf-8 и записать её в файл.

Всё должно быть нормально.
acme_ag
Хоть раздел, вроде, и для таких, как я, все же извиняюсь за тупак и несообразительность.

1. создаю файл input.txt (например), в utf-8
2. в нем первой строкой пишу #-*-coding:utf8-*
ок. пока понятно.

3. в нем же второй строкой пишу s = u'русские буквы'?
4. закодировать строку в utf-8 и записать её в файл – какую и как?
Budulianin
acme_ag
3. в нем же второй строкой пишу s = u'русские буквы'?

Две пустые строки(для читаемости) и потом пиши: s = u'русские буквы'

Потом
s_encode = s.encode('utf-8')

Потом пиши эту закодированную строку в файл и смотри что в нём.
acme_ag
В консоли ошибка:
'ascii' codec can't decode byte 0xd1 in position 26…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB