Столкнулся с странной особеностю в Python 3, вроде как по книжке делаю все правильно, а на практике выходить совсем другое, итак суть вопроса:
что установлено: FreeBSD, Python 3.3
два файла кода: test1.py test2.py
файл: data.txt (кодировка utf-8)
test1.py - берет данные с базы(utf-8) и записывает в файл (utf-8). Тут все хорошо, данные читаються с базы в нормальном формате и пишуться в файл в нормальном формате. Вот пример файла:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import mysql.connector, sys conn = mysql.connector.connect (host = 'localhost', user = 'user', password='password', db='db', charset='utf-8') cur = conn.cursor() cur.execute("SELECT ... и т.п.") file_db = open('/var/tmp/data.txt', 'a', encoding='utf-8') for row in cur.fetchall(): file_db.write(("%s\t%s %s,%s\n" % (row[0],row[1],row[2],row[3]))) file_db.close() cur.close() conn.close()
data.txt - файл в кодировке utf-8, с кирилицей, пример файла:
8000 тест 1,1 8001 тест 1,2 8002 тест 1,3 8003 тест 1,4
test2.py - читает данные с файла и выводит на екран в консоль, вот пример файла:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- file_db = open('/var/tmp/ip.txt', 'r', encoding='utf-8') for fdata in file_db: print(fdata) file_db.close()
Вот с принтом и казус, вроде как бы должен вывести нормально текст, но вместо получаю сообщение:
server# ./test2.py Traceback (most recent call last): File "./test2.py", line 33, in <module> print(fdata) UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-10: ordinal not in range(128) server#
Что именно не может переварить принт? position 5-10 это какраз слово “тест” в кирилице. Подскажите пожалуйста.