evilempirer
Ноя. 18, 2010 12:08:58
Часто можно найти (да чего уж там всегда =) ) автоматом нагененеренную для библиотек документацию например вот
http://pydoc.org/2.5.1/encodings.punycode.html мне нужна функция конверта из/в punycod, если с классами все ясно (доступ по точке), что откуда и как. То вот раздел функции где и находятся нужные функции, что это и как их вызывать и раздел data, что это ?
Андрей Светлов
Ноя. 18, 2010 13:03:16
>>> u'рус'.encode('punycode')
'p1acf'
>>> print 'p1acf'.decode('punycode')
рус
evilempirer
Ноя. 18, 2010 18:49:15
это отлично, но как вы это поняли исходя из выше приведенной доки ? =)
evilempirer
Ноя. 18, 2010 18:58:06
In : i = u'президент.рф'
In : i.encode('punycode')
Out: ‘.-abgm8zgbqk1dr4tcbbbbbincb’
Да и паникод странный мне нужен для перекодировки урлов, а тут такое.
Андрей Светлов
Ноя. 18, 2010 20:42:33
Я знаю, как работает encoding в Питоне.
Та дока, которую вы открыли - это глубокие детали реализации.
Они нужны при разработке нового кодека - и, наверное, всё.
Интерфейс внешнего уровня гораздо проще - .encode у юникода и .decode у байт-строки.
Такое - это правильно закодированная строка. Доменные имена в душе именно так и выглядят. А вы что ожидали?
evilempirer
Ноя. 19, 2010 08:19:59
тогда задам вопрос по другому как получить код вида
xn–d1abbgf6aiiy.xn–p1ai
Андрей Светлов
Ноя. 19, 2010 10:41:21
>>> u'президент.рф'.encode('idna')
'xn--d1abbgf6aiiy.xn--p1ai'
evilempirer
Ноя. 19, 2010 11:59:53
Мне вот что выдает
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'
Андрей Светлов
Ноя. 19, 2010 13:37:55
Ну уж не знаю, как вы это получили.
У вас стандартный test.test_codecs проходит нормально?
В нем есть проверки для idna на не ascii символы.
evilempirer
Ноя. 19, 2010 14:50:12
Уххх, видимо проблема с ipython, в обычной строке интерпретатора все нормально проходит.