Форум сайта python.su
0
Здравствуйте!
Столкнулся с странной особеностю в 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()
8000 тест 1,1 8001 тест 1,2 8002 тест 1,3 8003 тест 1,4
#!/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#
Офлайн
0
Отвечу сам себе, так как нашел причину, все дело в локалях системы.
Пробежался гуглом, и нашел на одном из форумов про Django, комментарий от пользователя xxnikolayxx, за что ему спасибо:
Решение для FreeBSD и других unix-like систем:
Сначало необходимо убедиться, что в операционной системе все в порядке с локациями, вводим:
locale
setenv LC_ALL en_US.UTF-8 setenv LANG en_US.UTF-8
locale -a
locale -a | grep UTF-8
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
Отредактировано omatic (Март 26, 2013 21:41:54)
Офлайн