LINUX.ORG.RU

python: запись строки cp1251 -> utf-8 в файл


0

0

bug.txt: http://pastebin.com/m657418a6 (строки в cp1251)
системная локаль: LANG=en_GB.UTF-8

Файл bug.txt:
Àâñòðèÿ
Áàãàìñêèå îñòðîâà

Программа:
#! /usr/bin/env python
# -*- coding: utf-8 -*-

if "__main__" == __name__:
     s = open("bug.txt", "r").readlines()[1]
     u = u"country: "
     u += unicode(s, "cp1251")
     open("not-bug.txt", "w").write(u)

Нужно: записать перекодированную из cp1251 в utf-8 строку в файл. Получаю exception:

open("not-bug.txt", "w").write(u)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 8-25: ordinal not in range(128)

Что я делаю не так? Спасибо.
anonymous

Ответ на: комментарий от ShprotX

В итоге в файл записывается что-то нечитаемое:

country:Áàãàìñêèå îñòðîâà

anonymous
()
Ответ на: комментарий от Deleted

забыл уточнить... encode - переделать строку из системной локали в ту, которая будет указана в параме. decode - переделать из кодировки, указанной в параметре, в системную.

Deleted
()

Àâñòðèÿ Áàãàìñêèå îñòðîâà

это больше похоже на UTF-8 при отображении в CP1251

Deleted
()
Ответ на: комментарий от anonymous

> В итоге в файл записывается что-то нечитаемое

> country:Áà ãà ìñêèå îñòðîâГ

Увы, у меня все работает, специально проверил. Строка на utf-8 похожа, между прочим.

ShprotX
()

И, вправду. Строка поковеркалась, когда копипастил. Вот файл со строками в оригинальной кодировке: http://ifolder.ru/7646680. Задача все та же: хочу, что бы после записи в файл, `cat not-bug.txt` отобразил читаемый русский текст.

Уже и codecs.open() сюда приплел, все равно не помогает :(.

anonymous
()
Ответ на: комментарий от anonymous

Я же тебе показал как нужно делать...

fantom@think:/tmp$ cat ./test.py 
import os

for line in ( open ('/tmp/enc.txt','r')):
    print line.decode('CP1251')

fantom@think:/tmp$ python ./test.py 
Алжир

Американское Самоа

Ангола

Deleted
()

Все я правильно написал, попробуйте посмотреть в ДНК, там тоже могут быть косяки. Анонимус, который может быть даже был создателем этой темы, пытается смотреть файл с utf-8 как содержащий cp1251.

ShprotX
()

Всем спасибо за помощь. Оказывается это BeautifulSoup портил текст при чтении.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.