Найти - Пользователи
Полная версия: UNICODE - проблема с кириллицей
Начало » Python для новичков » UNICODE - проблема с кириллицей
1
mistercx
Здравствуйте!

Многочисленные эксперименты не помогли, гугл тоже.
Проблема: Питоном формируется хеш в 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?

Вариант “в лоб” не предлагать, хоть он и работает! :)
o7412369815963
переходи на utf8
Александр Кошелев
mistercx
goto('/admin/#timeout/{0}'.format(unicode('кириллица','CP1251')))
что такое goto?
Rodegast
> unicode('кириллица','CP1251')

С каких пор CP1251 стал юникодом? Тогда уже пиши:
unicode('кириллица','utf-8')
или
u"кириллица"
Александр Кошелев
Rodegast
С каких пор CP1251 стал юникодом?
Примерно с тех пор как utf-8 им не стал.
mistercx
Daevaorn
что такое goto?
имя моей функции, формирующей URL-строку перенаправления по Location:

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

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

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

Неужели нет ДРУГОГО способа кроме как менять кодировку скрипта на utf-8?! Т.е. если исходная кодировка скрипта - cp1251 я НИКАК не могу получить строку на кириллице в UNICODE?! С трудом вериться…
pyuser
mistercx
'/admin/#timeout/{0}'.format(unicode('кириллица','CP1251'))
мне кажется проблема в том, что вы в строку пытаетесь записать уникод :)
# видимо так будет правильнее
u'/admin/#timeout/{0}'.format(unicode('кириллица','CP1251')
# или так
u'/admin/#timeout/{0}'.format(u'кириллица')
o7412369815963
ещё можно установить дефолтный кодинг в ср1251
import sys
reload(sys)
sys.setdefaultencoding('cp1251')
cp1251 - попса :)
Андрей Светлов
o7412369815963, не советуйте плохого.
Не весь работающий код одинаково полезен. Кое-что лучше никому не показывать и никогда не употреблять самому.
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