Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Кириллица и Unicode

39K
13 декабря 2009 года
RomBR
4 / / 26.07.2008
Есть питоновский файл в кодировке UTF-8.
В нем в начале прописал "# -*- coding: utf8 -*-".
В нем есть код "print 'Русский текст' ".
Но при выполнении выдается ошибка "UnicodeEncodeError: 'ascii' codec can't encode characters in position 0: ordinal not in range(128)"
Если же написать так "print u'Русский текст' ".
То работает.
Можно ли обойтись без этого u"текст", ведь файл и так в юникоде?
6
13 декабря 2009 года
George
4.1K / / 05.01.2007
объясняли нам как-то, что кодировка файла, и кодировка ввода-вывода это разные вещи и нельзя их путать. т.е. в принте надо напрямую в юникод кодировать.
502
13 декабря 2009 года
Jail
550 / / 30.01.2007
Маленькая буква ‘u’ перед кавычками указывает, что предполагается создание строки Unicode.
Встроенная функция unicode() может работать с Latin-1, ASCII, UTF-8, UTF-16, с русскими кодировками ISO-8859-5, KOI8-R, CP1251, CP866 и Mac-cyrillic, и многими другими. Python по умолчанию использует кодировку ASCII , например, при выводе на экран инструкцией print и записи в файл. Если у Вас есть данные в определенной кодировке, для получения строки Unicode используйте встроенную функцию unicode(), указав кодировку в качестве второго аргумента:
 
Код:
s = unicode("Привет Всем!", "KOI8-R")
Если строка Unicode содержит символы с кодом больше 127, преобразование в ASCII не возможно (что собственно и происходит):
Цитата:
UnicodeError: ASCII encoding error: ordinal not in range(128)

Метод encode() позволяет преобразовывать строки Unicode в обычные строки, содержащие текст в указанной кодировке:

 
Код:
s.encode("KOI8-R")
s.encode("UTF-8")
ASCII является общей частью для подавляющего большинства кодировок. Вы можете изменить кодировку по умолчанию с помощью функции sys.set_string_encoding(). Однако лучше все же указывать ее явно.
39K
14 декабря 2009 года
RomBR
4 / / 26.07.2008
Всем спасибо за ответы. Из сказанного стало ясно, что в строковых константах без префикса u не обойтись.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог