Форум сайта python.su
Господа,
если не трудно, помогите новичку.
Платформа - linux
Написал я скрипт.
Читает он из базы (SQLite) энное количество строк в utf-8,
а затем пишет эти строки в файл.
Так вот.
Читать-то он читает, но потом, при записи в файл (или раньше?) кодирует строку utf-8
в строку вида \u0440\u0435\u0442\u043d\u043e
Как мне записать в файл исходный utf-8? Хотя, лучше, конечно, если это будет koi8-r.
читаю из базы так:
cursor = db.cursor()
sql = ‘SELECT txt FROM tbl;’
cursor.execute(sql)
row = cursor.fetchone()
str = row
Пишу в файл так:
texfile = open(“/tmp/file”, ‘w+’)
pickle.dump(str, file)
Кстати, если не трудно, почему вызывает ошибку такая конструкция:
texfile.write(“чего-нить по-русски”)
Заранее спасибо.
Офлайн
“\u0440\u0435\u0442\u043d\u043e” - это и есть сериализованная юникодная строка
Офлайн
1)модуль pickle сохраняет объекты, а не просто пишет в файл
2)по умолчанию файл бинарный поэтому попытка записать юникодную строку texfile.write(“чего-нить по-русски”) будет ошибкой
нужно сделать специальный файл
import codecs
f=codecs.open(“/tmp/file”,'w+','UTF-8')
f.write('Привет мир')
или так
import codecs
f=codecs.open(“/tmp/file”,'w+','koi8-r')
f.write('Привет мир')
преобразование из юникода в koi8-r будет автоматическое
главное не забывай ставить вначале файла метку для питона
# -*- coding: UTF-8 -*-
она указывает питону в какой кодировке ты написал русские буквы в программе
эти данные ему необходимы для того чтобы чётко знать что во что перекодировать
Отредактировано (Авг. 20, 2008 07:53:16)
Офлайн