Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 19, 2008 21:21:14

xander
От:
Зарегистрирован: 2008-08-19
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос новичка: python и русские буквы.

Господа,
если не трудно, помогите новичку.

Платформа - 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(“чего-нить по-русски”)

Заранее спасибо.



Офлайн

#2 Авг. 20, 2008 07:37:50

evgenyl
От:
Зарегистрирован: 2008-07-22
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос новичка: python и русские буквы.

“\u0440\u0435\u0442\u043d\u043e” - это и есть сериализованная юникодная строка



Офлайн

#3 Авг. 20, 2008 07:51:34

evgenyl
От:
Зарегистрирован: 2008-07-22
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос новичка: python и русские буквы.

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)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version