Найти - Пользователи
Полная версия: Научите работать с документацией
Начало » Python для новичков » Научите работать с документацией
1 2
evilempirer
Часто можно найти (да чего уж там всегда =) ) автоматом нагененеренную для библиотек документацию например вот http://pydoc.org/2.5.1/encodings.punycode.html мне нужна функция конверта из/в punycod, если с классами все ясно (доступ по точке), что откуда и как. То вот раздел функции где и находятся нужные функции, что это и как их вызывать и раздел data, что это ?
Андрей Светлов
>>> u'рус'.encode('punycode')
'p1acf'
>>> print 'p1acf'.decode('punycode')
рус
evilempirer
это отлично, но как вы это поняли исходя из выше приведенной доки ? =)
evilempirer
In : i = u'президент.рф'

In : i.encode('punycode')
Out: ‘.-abgm8zgbqk1dr4tcbbbbbincb’

Да и паникод странный мне нужен для перекодировки урлов, а тут такое.
Андрей Светлов
Я знаю, как работает encoding в Питоне.
Та дока, которую вы открыли - это глубокие детали реализации.
Они нужны при разработке нового кодека - и, наверное, всё.
Интерфейс внешнего уровня гораздо проще - .encode у юникода и .decode у байт-строки.

Такое - это правильно закодированная строка. Доменные имена в душе именно так и выглядят. А вы что ожидали?
evilempirer
тогда задам вопрос по другому как получить код вида
xn–d1abbgf6aiiy.xn–p1ai
Андрей Светлов
>>> u'президент.рф'.encode('idna')
'xn--d1abbgf6aiiy.xn--p1ai'
evilempirer
Мне вот что выдает
In [11]: u'президент.рф'.encode('idna')
---------------------------------------------------------------------------
UnicodeError Traceback (most recent call last)

/home/viklov/<ipython console> in <module>()

/usr/lib/python2.6/encodings/idna.pyc in encode(self, input, errors)
162 trailing_dot = ''
163 for label in labels:
--> 164 result.append(ToASCII(label))
165 # Join with U+002E

166 return ".".join(result)+trailing_dot, len(input)

/usr/lib/python2.6/encodings/idna.pyc in ToASCII(label)
74
75 # Step 2: nameprep

---> 76 label = nameprep(label)
77
78 # Step 3: UseSTD3ASCIIRules is false


/usr/lib/python2.6/encodings/idna.pyc in nameprep(label)
36 stringprep.in_table_c8(c) or \
37 stringprep.in_table_c9(c):
---> 38 raise UnicodeError("Invalid character %r" % c)
39
40 # Check bidi


UnicodeError: Invalid character u'\x80'
Андрей Светлов
Ну уж не знаю, как вы это получили.
У вас стандартный test.test_codecs проходит нормально?
В нем есть проверки для idna на не ascii символы.
evilempirer
Уххх, видимо проблема с ipython, в обычной строке интерпретатора все нормально проходит.
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