Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2010 13:00:09

mistercx
От:
Зарегистрирован: 2009-09-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

Здравствуйте!

Многочисленные эксперименты не помогли, гугл тоже.
Проблема: Питоном формируется хеш в URL'е перехода, JavaScript'ом надо хеш расшифровать и показать пользователю.

Естественное решение: в Python urllib.quote - в JavaScript unescape
НО! Поскольку последняя принимает строку unicode, необходимо, чтобы Python таковую туда передал.

В скрипте:

#!d:/usr/local/bin/python -u
# -*- coding: cp1251 -*-
конструкция …goto('/admin/#timeout/{0}'.format(unicode('кириллица','CP1251'))) вылетает с ошибкой:

UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-2: ordinal not in range(128)

В упор не пойму, что делаю не так?

Пробовал ещё через base64 передавать - тоже фигня выходит… JavaScript-версии base64 возвращают строку не на треть большую, как в спецификации, а почти в 3 с лишним раза большую… Одним словом, какие будут идеи по поводу передачи из Python'а в URL броузера кириллицы и дальнейшая её расшифровка JavaScript?

Вариант “в лоб” не предлагать, хоть он и работает! :)



Офлайн

#2 Сен. 21, 2010 15:50:17

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

Офлайн

#3 Сен. 21, 2010 19:20:30

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

mistercx
goto('/admin/#timeout/{0}'.format(unicode('кириллица','CP1251')))
что такое goto?



Офлайн

#4 Сен. 21, 2010 20:13:04

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2840
Репутация: +  186  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

> unicode('кириллица','CP1251')

С каких пор CP1251 стал юникодом? Тогда уже пиши:

unicode('кириллица','utf-8')
или
u"кириллица"



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано (Сен. 21, 2010 20:14:42)

Офлайн

#5 Сен. 21, 2010 22:37:12

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

Rodegast
С каких пор CP1251 стал юникодом?
Примерно с тех пор как utf-8 им не стал.



Офлайн

#6 Сен. 22, 2010 02:00:32

mistercx
От:
Зарегистрирован: 2009-09-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

Daevaorn
что такое goto?
имя моей функции, формирующей URL-строку перенаправления по Location:

Rodegast
unicode('кириллица','utf-8')
или
u“кириллица”
Без твоего совета я бы никак об этом не догадался! :)

Не фурычит! Со стокой
# -*- coding: cp1251 -*-

ни так, ни сяк.

Неужели нет ДРУГОГО способа кроме как менять кодировку скрипта на utf-8?! Т.е. если исходная кодировка скрипта - cp1251 я НИКАК не могу получить строку на кириллице в UNICODE?! С трудом вериться…



Офлайн

#7 Сен. 22, 2010 03:44:29

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

mistercx
'/admin/#timeout/{0}'.format(unicode('кириллица','CP1251'))
мне кажется проблема в том, что вы в строку пытаетесь записать уникод :)
# видимо так будет правильнее
u'/admin/#timeout/{0}'.format(unicode('кириллица','CP1251')
# или так
u'/admin/#timeout/{0}'.format(u'кириллица')



Офлайн

#8 Сен. 22, 2010 05:46:44

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

UNICODE - проблема с кириллицей

ещё можно установить дефолтный кодинг в ср1251

import sys
reload(sys)
sys.setdefaultencoding('cp1251')
cp1251 - попса :)

Отредактировано (Сен. 22, 2010 05:47:46)

Офлайн

#9 Сен. 22, 2010 06:47:03

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

UNICODE - проблема с кириллицей

o7412369815963, не советуйте плохого.
Не весь работающий код одинаково полезен. Кое-что лучше никому не показывать и никогда не употреблять самому.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version