Провёл ряд экспериментов с кодировками в Python 2.6.2/Windows 7. Получается так: 2.6.2 и UTF-8 дружат, если строковые литералы корректно записывать:
# -*- coding: UTF-8 -*-
name = "Вася" #неверно
name = u"Вася" #верно
Куда интереснее ситуация с чтением/записью файла.
Чтение и вывод в консоль:
# -*- coding: UTF-8 -*-
print(u"-*- Проверка чтения из файла -*-")
file = open("fixes.txt", "r")
buffer = file.read()
print unicode(buffer, "cp1251") #верно
print buffer #неверно
Чтение и форматирование:
#! /usr/bin/python
# -*- coding: UTF-8 -*-
print(u"-*- Проверка чтения из файла и форматирования -*-")
file = open("user.txt", "r")
buffer = file.read()
newbuffer = unicode(buffer, "cp1251")
#str1 = (u"Здесь был {0}").format(buffer)
str2 = (u"Здесь был {0}").format(newbuffer)
print(u"Считано:")
print(buffer)
#print(str1)
print(u"Декодировано:")
print(newbuffer)
print(str2)
Чтение, форматирование, запись:
#! /usr/bin/python
# -*- coding: UTF-8 -*-
print(u"-*- Проверка чтения из файла, форматирования и записи -*-")
file = open("user.txt", "r")
buffer = file.read()
newbuffer = unicode(buffer, "cp1251")
str2 = (u"Здесь был {0}").format(newbuffer)
print(u"Декодировано:")
print(newbuffer)
print(str2)
file2 = open("hello.txt", "w")
file2.write(str2.encode("cp1251"))