Форум сайта python.su
простейший скрипт:
# -*- coding: cp1251 -*-
f=open("test1.csv", 'r')#откроем файл для чтения
#print(f.readline())
#f=codecs.EncodedFile(f,"cp1251","utf-8")# кодировка данных cp1251 файла - utf-8
f1=open("test.csv", 'w')#откроем файл для чтения
for l in f:
print(l)
f1.write(f.readline())
Traceback (most recent call last):
File "test2.py", line 6, in <module>
for l in f:
File "C:\Python31\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 517: character maps to <undefined>
Офлайн
Такая ошибка появляется только если пытаться перекодировать utf-8 в cp1251
Офлайн
beliy_shumэто логика, нужно знать что хочешь сделать.
Программирование это логика, или танцы с бубном?*
open("test.csv", 'w').write( open("test1.csv", 'r').read().decode('cp1251').encode('utf8') )
Офлайн
:)
когда же люди начнут читать документацию?
http://docs.python.org/py3k/library/functions.html?highlight=open#open
посмотрите на параметр encoding
Офлайн
ofigetitelnoкак видно из моего кода я кодировку указывал явно(например такой код не работает):
посмотрите на параметр encoding
import codecs
f=open("test1.csv", 'r')
f=codecs.EncodedFile(f,"utf-8","utf-8")# кодировка данных - utf-8, файла - тоже utf-8
f1=open("test.csv", 'w')
f1=codecs.EncodedFile(f,"utf-8","utf-8")# кодировка данных - utf-8, файла - тоже utf-8
f1.write(f.readline())
f1=codecs.EncodedFile(f,"cp1251","utf-8")
Отредактировано (Ноя. 9, 2010 13:26:14)
Офлайн
Если желаете использовать EncodedFile - файл открывайте в двоичном режиме - через ‘rb’ или ‘wb’.
Действительно, строки с байтами не клеятся, к счастью. К слову, EncodedFile со строками вообще не работает.
Слухи о сложностях utf8 не соответствуют действительности.
К тому же, если у вас python 3.1 - к чему это? В программе все - юникодные строки. Байтами в какой-либо кодировке они становятся только на вводе-выводе.
З.Ы. Документацию таки прочитать не вышло?
Офлайн
Несмотря на то, что с выходом третьей версии питона проблемы с кодировками были полностью решены, у некоторых они всё ещё случаются. Инерционность общества?
Офлайн
подскажите пожалуйста что мне читать из документации. документацию я читаю, но с кодировками проблемы у меня как были, так и остаются. Спасибо.
Разве методы строк и регулярных выражений корректно работают в юникоде? Я не понимаю какие методы мне использовать. Если существует универсальный ответ, поделитесь пожалуйста.
Офлайн
Мы же говорим о третьем питоне, верно?
Строки и регулярные выражения - работают.
Более того, регулярки на байтах, например, не работают с не ASCII символами.
Что у вас не получается?
Кстати, для вас юникод - это что?
В тройке все строки - юникодные. Это те, которые ‘строка’, тип str.
Байты начинаются с префикса b - b'строка байт', тип bytes.
Байты могут быть в разных кодировках, строки кодировки не имеют.
utf-8 - это не юникод.
Отредактировано (Ноя. 10, 2010 14:06:31)
Офлайн
Почему бы не open('name.txt', encoding='utf-8')
Офлайн