Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 2009-07-22 00:24:20 ЛС | профиль | цитата
MAV, учту.


Провёл ряд экспериментов с кодировками в 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)
(закомментированные строки дают exception)

Чтение, форматирование, запись:

#! /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"))
Вот что с этим делать - непонятно. Мне бы не хотелось постоянно за собой таскать хвост из перекодировок (это напрочь убьёт читаемость кода).

карма: 1

0