shiza
Сен. 3, 2008 19:30:32
hsbc
Код покажи.
hsbc
Сен. 3, 2008 19:33:21
да код простейший
#!/usr/bin/python
# -*- coding: utf-8 -*-
print ‘Уруру’
shiza
Сен. 3, 2008 19:38:41
плохо доку читал =)
#!/usr/bin/python
# -*- coding: utf-8 -*-
print u'Уруру'.encode('cp866')
#здесь буква u перед ковычкой говорит о том, что дальше строка будет юникодная.
#encode('cp866') -кодирует в кодировку консоли
hsbc
Сен. 3, 2008 19:43:47
блин………ну это издевательство наверно
я в 8 посте своё написал как решил данную проблему…….теперь ты мне пишеш почти тоже самое…..тока кодировка другая
кстате пашет…….
hsbc
Сен. 3, 2008 19:45:00
и всё равно благодарю всех, за неоценимую помощь))))))))
вроде разобрался…….
shiza
Сен. 3, 2008 19:49:49
там было не encode а decode; и кодировка не консоли, а скрипта. “…не в лотерею, а в карты, и не выиграл, а проиграл.” ;)
из чего можно было сделать вывод - что в голове понимания нет. А кодировки в питоне такая штука - что без хорошего понимания “что и как” - постоянно вылезают косяки. По себе знаю.
hsbc
Сен. 3, 2008 19:52:34
ну, чтож поделаеш, на ошибках учатся, зато теперь понимание пошло….
Собственн то, что я и писал. Не достаточно в начале модуля указать coding: utf-8 или cp1251, это всего-лишь директива для Python, как воспринимать твой код (строки), все содержимое у тебя не становится такой кодировки автоматически (волшебства не будет, дед мороз сдох), за этим должен следить ты используя свой любимый редактор (99% всех виндовых работают с cp1251 по умолчанию, работать с utf-8 под виндой сложновато).
..bw
The gray Cardinal
Сен. 4, 2008 12:01:59
evgenyl
Сен. 4, 2008 12:57:23
Уфф, сколько же было уже всего про кодировки
Итак, уясним несколько вещей.
1) Питон настолько универсальный язык что пишут на нём где попало и на чём попало. Вследствии чего возникает проблемма, в винде кодировка cp1251 в линуксе например у когото KOI8-R у когото utf-8. Интерпретатор начинает задумываться а как ему толковать символ выше номера 128 (потому что выше в разных кодировках всё по разному) ????
Решение очень простое сказать в какой кодировке я пишу файл !
что мы и делаем инструкцией # -*- coding: cp1251 -*-
2) В каждой операционной системе будь то консоль или ещё чтото, коды символов для отображения тоже отличаются, например в виндовсе в GUI используется cp1251 (для русских букв), а в консоли cp866.
Выход из этого тоже очень простой, сказать интерпретатору как работать с символами внутри языка и соответственно выводить ети данные на экран.
вот пример
import sys
reload(sys)
sys.setdefaultencoding('cp866')
если не ошибаюсь то в линуксах этого делать не нужно, настройки бурется из системной переменной LANG
3) простая строка - это также и блок данных в питоне, т.е. бинарные данные, символ с кодом 180 будет и на экран подаваться как 180,
а если вы писали в cp1251 а вы водите в cp866 то логично это будут 2 абсолютно разных символа, поэтому лучше всего использовать юникодные строки, интерпритатор сам будет конвертировать вам их при выводе.
Итого вам нужно понимать:
* в какой кодировке пишет символы ваш редактор
* в какой кодировке выводит ваша консоль или приложение
* обычные строки это блок данных а не строка
после чего получаем примерный текст программы, допустим мы его пишем в блокноте
# -*- coding: cp1251 -*-
import sys
reload(sys)
sys.setdefaultencoding('cp866')
print u'Привет мир'
запускаем его в консоли и радуемся :)
если попытаться вывести строку не юникодную то она выведется с кодами символов cp1251, вам давали пример ‘Привет мир’.encode('cp866') - этот код перекодирует из одной кодировке бинарные данные в другую, как раз в ту в которую вам нужно выводить в консоли
Фух….
Думаю понятней уже некуда объяснить.