Найти - Пользователи
Полная версия: Русская кодировка
Начало » Python для экспертов » Русская кодировка
1 2 3 4
shiza
hsbc
Код покажи.
hsbc
да код простейший

#!/usr/bin/python
# -*- coding: utf-8 -*-
print ‘Уруру’
shiza
плохо доку читал =)
#!/usr/bin/python
# -*- coding: utf-8 -*-
print u'Уруру'.encode('cp866')
#здесь буква u перед ковычкой говорит о том, что дальше строка будет юникодная.
#encode('cp866') -кодирует в кодировку консоли
hsbc
блин………ну это издевательство наверно
я в 8 посте своё написал как решил данную проблему…….теперь ты мне пишеш почти тоже самое…..тока кодировка другая
кстате пашет…….
hsbc
и всё равно благодарю всех, за неоценимую помощь))))))))
вроде разобрался…….
shiza
там было не encode а decode; и кодировка не консоли, а скрипта. “…не в лотерею, а в карты, и не выиграл, а проиграл.” ;)
из чего можно было сделать вывод - что в голове понимания нет. А кодировки в питоне такая штука - что без хорошего понимания “что и как” - постоянно вылезают косяки. По себе знаю.
hsbc
ну, чтож поделаеш, на ошибках учатся, зато теперь понимание пошло….
bw
Собственн то, что я и писал. Не достаточно в начале модуля указать coding: utf-8 или cp1251, это всего-лишь директива для Python, как воспринимать твой код (строки), все содержимое у тебя не становится такой кодировки автоматически (волшебства не будет, дед мороз сдох), за этим должен следить ты используя свой любимый редактор (99% всех виндовых работают с cp1251 по умолчанию, работать с utf-8 под виндой сложновато).

..bw
The gray Cardinal
http://forum.script-coding.info/viewtopic.php?id=845
evgenyl
Уфф, сколько же было уже всего про кодировки
Итак, уясним несколько вещей.

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

Фух….
Думаю понятней уже некуда объяснить.
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