LINUX.ORG.RU

Опять кодировки...

 , , ,


0

1

Есть файл main.py в UTF-8. В нем запрос который выполняется в БД (которая тоже ВСЯ URF-8). Запрос возвращает от 0 до Н строк, в них присутсвуют числовые и строковые типы данных, а также тип дата-время.

Я Пытаюсь записать все это в файл, но вылазит ошибка:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 60: ordinal
 not in range(128)

Кусок кода:

import string
import MySQLdb
from Cheetah.Template import Template

sqlQuery = """
	...
"""

def connect_db():
    db = MySQLdb.connect("host", "root", "passwd")
    return db

def main():
	f = open("result.txt", "w")
	
	db = connect_db()
	
	cur = db.cursor()
	
	db.set_character_set('utf8')
	cur.execute('SET NAMES utf8;')
	cur.execute('SET CHARACTER SET utf8;')
	cur.execute('SET character_set_connection=utf8;')
	
	cur.execute(sqlQuery)
	
	i = 0;
	for row in cur.fetchall():
		/* здесь заполняется nameSpace для Cheetah */
		
		/* Здесь с помощью Cheetah заменяется куча значений в тексте. Ошибока здесь и валазит. */
		t = Template(templateDef, searchList=[nameSpace])
		f.write(t.__str__())

	f.close()

if __name__ == "__main__":
    main()

Deleted

Последнее исправление: CYB3R (всего исправлений: 2)

Угадал автора по топику.

Lilly
()

Ты уже на звезду постов настрочил, а гуглить всё так же не умеешь. Надоел уже.

Deleted
()

Чувак, ну почитай уже документацию, а? То, что ты записал .py-файл в редакторе в UTF-8 совсем не означает, что python2.X интерпретирует кодировку как UTF-8 (python2 использует ASCII).

Если работаешь с UTF-8, то не забывай прописывать в файле:

# -*- coding: utf-8 -*-

f.write(t.__str__())

Ты хоть понимаешь, что __str__ возвращает байтовую ASCII-строку?
Используй __unicode__ или unicode(t.__str__()).encode('utf-8')

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

Ты хоть понимаешь, что __str__ возвращает байтовую ASCII-строку?
Используй __unicode__ или unicode(t.__str__()).encode('utf-8')

Спасибо, да, описался.

Deleted
()

f.write(t.__str__())

убивать
t.__str__() - пишут редиски
str(t) - пишут программисты, умеющие в питон

Virtuos86 ★★★★★
()
Ответ на: комментарий от Boba_Fett

Он уже несколько месяцев копается, всё никак докопаться не может.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от Boba_Fett

не, ну я поругал, но подсказку дал

до манов докопаться

ему некогда, он риальне код пишет

Virtuos86 ★★★★★
()

Шул 2014 год, а народ всё ещё не переходил на питон3 и продолжал ЖРАТЬ КАКТУС. Зачем же так над собой издеваться?

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

Про это я и говорю — не умеешь.

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

python2.X интерпретирует кодировку как UTF-8 (python2 использует ASCII).

Спасибо еще раз, вот это реально полезная информация.

С проблемой разобрался.

Deleted
()

Прошу помощи.

Я просто и с уважением прошу помощи У участников форума, которые, я уверен, знают linux значительно лучше меня.У меня следующая беда: ранее я написал несколько программ, работающих в Red Hat 7.3 Изображение на экране формировалось с помощью библиотеки curses включало в себя буквы русского алфавита и псевдографические символы(в кодировке KOI8-R). Все успешно работало. Но мне нужно, чтобы это же ПО выполнялось и в Fedora 2.6.35.14 А в этой версии ОС вместо символов псевдографики на экране отображаются латинские заглавные буквы с значком ~ впереди, вместо русских букв отображаются уменьшенные знаки вопроса. Перекомпилировался в новой ОС с новым gss - результат тот же Присвоил переменной окружения LANG значение ru_RU.KOI8-R (по умолчанию было ru_RU.UTF-8) тоже ничего не изменилось.Пробовал изменить текст программы: выдавать на экран псевдографику в формате UTF-8 но на каждую позицию экрана выдается один байт а кодировка трехбайтовая и это опять чушь. В общем, нахожусь в тупике, очень нуждаюсь в совете

artemmin
()
Ответ на: Прошу помощи. от artemmin

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

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