В результате отображаются кракозябры. unicode(fp.readline()) не работает, что и понятно.
Вопрос: как(чем) правильно читать/писать юникодные файлы? Предполагаю, что нужно использовать модуль codecs. Я правильно думаю, или есть более python-way?
Если это важно: Debian Lenny, locale: en_US.UTF-8, Python 2.5.4.
Здравствуйте, theTosh, Вы писали:
T>Вопрос: как(чем) правильно читать/писать юникодные файлы? Предполагаю, что нужно использовать модуль codecs. Я правильно думаю, или есть более python-way?
У прочтённых строк вызвать decode(). Ну да, это тот же codecs в итоге.
Варианта назначить encoding файлу для автоконверсии (как в перле) нет, атрибут encoding есть, но read-only. Возможность назначить encoding при открытии появилась только в 3.0.
Здравствуйте, netch80, Вы писали:
T>>Вопрос: как(чем) правильно читать/писать юникодные файлы? Предполагаю, что нужно использовать модуль codecs. Я правильно думаю, или есть более python-way?
N>У прочтённых строк вызвать decode(). Ну да, это тот же codecs в итоге. N>Варианта назначить encoding файлу для автоконверсии (как в перле) нет, атрибут encoding есть, но read-only. Возможность назначить encoding при открытии появилась только в 3.0.
А я вот тут нашел codecs.open(fname,encoding='utf-8') -- вроде правильно работает. Т.е. encoding прямо при открытии назначается. Или это нечто некошерное? Протестировал такие варианты:
Здравствуйте, netch80, Вы писали:
T>>А я вот тут нашел codecs.open(fname,encoding='utf-8') -- вроде правильно работает.
N>Хм, тоже вариант. "Слона-то я и не заметил"
T>>Результаты, на первый взгляд, одинаковые. Какому варианту отдать предпочтение? И почему?
N>Наверно, через codecs.open — ибо меньше ошибок совершишь.
Большое спасибо. Пожалуй, тему можно считать закрытой.
T>В результате отображаются кракозябры. unicode(fp.readline()) не работает, что и понятно.
А почему не работает-то? unicode(fp.readling(), "utf-8") — тоже никакого результата?
T>>В результате отображаются кракозябры. unicode(fp.readline()) не работает, что и понятно. HSH>А почему не работает-то? unicode(fp.readling(), "utf-8") — тоже никакого результата?