Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 3, 2008 19:30:32

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

hsbc
Код покажи.



Офлайн

#2 Сен. 3, 2008 19:33:21

hsbc
От:
Зарегистрирован: 2008-07-23
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

да код простейший

#!/usr/bin/python
# -*- coding: utf-8 -*-
print ‘Уруру’



Офлайн

#3 Сен. 3, 2008 19:38:41

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

плохо доку читал =)

#!/usr/bin/python
# -*- coding: utf-8 -*-
print u'Уруру'.encode('cp866')
#здесь буква u перед ковычкой говорит о том, что дальше строка будет юникодная.
#encode('cp866') -кодирует в кодировку консоли



Офлайн

#4 Сен. 3, 2008 19:43:47

hsbc
От:
Зарегистрирован: 2008-07-23
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

блин………ну это издевательство наверно
я в 8 посте своё написал как решил данную проблему…….теперь ты мне пишеш почти тоже самое…..тока кодировка другая
кстате пашет…….



Офлайн

#5 Сен. 3, 2008 19:45:00

hsbc
От:
Зарегистрирован: 2008-07-23
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

и всё равно благодарю всех, за неоценимую помощь))))))))
вроде разобрался…….



Офлайн

#6 Сен. 3, 2008 19:49:49

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

там было не encode а decode; и кодировка не консоли, а скрипта. “…не в лотерею, а в карты, и не выиграл, а проиграл.” ;)
из чего можно было сделать вывод - что в голове понимания нет. А кодировки в питоне такая штука - что без хорошего понимания “что и как” - постоянно вылезают косяки. По себе знаю.



Отредактировано (Сен. 3, 2008 19:50:36)

Офлайн

#7 Сен. 3, 2008 19:52:34

hsbc
От:
Зарегистрирован: 2008-07-23
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

ну, чтож поделаеш, на ошибках учатся, зато теперь понимание пошло….



Офлайн

#8 Сен. 4, 2008 02:19:59

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Русская кодировка

Собственн то, что я и писал. Не достаточно в начале модуля указать coding: utf-8 или cp1251, это всего-лишь директива для Python, как воспринимать твой код (строки), все содержимое у тебя не становится такой кодировки автоматически (волшебства не будет, дед мороз сдох), за этим должен следить ты используя свой любимый редактор (99% всех виндовых работают с cp1251 по умолчанию, работать с utf-8 под виндой сложновато).

..bw



Офлайн

#9 Сен. 4, 2008 12:01:59

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

Офлайн

#10 Сен. 4, 2008 12:57:23

evgenyl
От:
Зарегистрирован: 2008-07-22
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Русская кодировка

Уфф, сколько же было уже всего про кодировки
Итак, уясним несколько вещей.

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') - этот код перекодирует из одной кодировке бинарные данные в другую, как раз в ту в которую вам нужно выводить в консоли

Фух….
Думаю понятней уже некуда объяснить.



Отредактировано (Сен. 4, 2008 13:09:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version