Найти - Пользователи
Полная версия: Проблемы с utf-8
Начало » Python для новичков » Проблемы с utf-8
1 2
S1lent
Добрый день! Только начал изучать python, появился вопрос по кодировке, убил весь день на гугление - ничего не помогает. Пример, есть скрипт:

# -*- coding: utf-8 -*-
print u"Привет"


при выполнении ошибка:

Traceback (most recent call last):
File “kod.py”, line 2, in <module>
print u'Привет'
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-5: ordinal not in range(128)

Файл естественно сохранен в utf-8. В чём может быть проблема?
vkopey
сохранен в utf-8
Уверены?

Вот небольшой пример как избежать неприятностей с кодировками:
# -*- coding: utf-8 -*-
s = 'обычная строка'
us = u'юникод-строка '
print type (s), isinstance (s, str) # <type'str'> True
print type (us), isinstance (us, unicode) # <type'unicode'> True
s2 = us.encode ('utf-8') # кодирует в обычную строку utf-8
us2 = s.decode ('utf-8') # декодирует обычную строку utf-8 в юникод-строку
# или
us2 = unicode (s, 'utf-8')
print type (s2) # <type'str'>
print type (us2) # <type'unicode'>
print len('строка') # 10, потому что кодируется utf-8 (символы кодируются 1-6 байтами)
print len(u'строка') # 5
S1lent
да, Notepad++ говорит UTF-8 без BOM
тоже самое говорит Sublime text 2
vkopey
S1lent
да, Notepad++ говорит UTF-8 без BOM
тоже самое говорит Sublime text 2
Новичку советую пользоваться PyDev или PyCharm. Это удобнее для изучения Python.
S1lent
Спасибо, pyCharm тоже имеется.
Ситуация подробней - пример из шапки топика запускается на FreeBSD 8 разными версиями интрепритатора питона (2.6 и 2.7) в обоих случаях аналогичная ошибка. Если же этот же файл скопировать на виндовую машину и запустить из cmd на виндовом интерпритаторе - всё ОК.
vkopey
Добавь вначало
#!/usr/bin/env python
еще посмотри
http://python.su/forum/topic/11602/
еще интересно почитать:
http://habrahabr.ru/post/117236/
S1lent
ясное дело это не помогло, т.к. в любом случае запускаю скрипт в лоб
#pytnon 1.py
Chern
Есть подозрение, что проблема с локалью системы

попробуйте locale в консоли выполнить
S1lent
vkopey
еще посмотри
http://python.su/forum/topic/11602/
Спасибо огромное, действительно это то что нужно.

Если кто встретится с подобной проблемой - необходимо чтобы во фряхе локаль стояла по дефолту utf-8.
Как это сделать подробно описано здесь http://paix.org.ua/freebsd/ru_utf8.html
cpu
Отучайтесь от Windows. Если не хотите ставить на основную машину непонятный *nix, ставьте на винду виртуалку, в нее - *nix(туда - ssh, python и прочее, инструкций - в нете валом), я ставил дебиан с преднастроенными локалями во время установки. На винду - какой-нибудь SFTP-клиент, например sftp drive(создает в винде виртуальный диск с нужной директорией в виртуалке, ему нужна таблетка) и scite(надо настроить сохранение и автораспознавание UTF-8, это бесплатно). Ели вам удастся настроить этот аэробус и взлететь, вы получаете все преимущества *nix не отказываясь от пользовательского привычного окружения windows. Кстати, такой метод помогает пересесть под linux очень мягко, не нарушая сна :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB