Подскажите, как упаковать число в юникод, вот нашел код но он на перле:
$str =~ s/&#x([0-9A-F]+?);/pack("U", hex($1))/ge;$str =~ s/&#x([0-9A-F]+?);/pack("U", hex($1))/ge;lobsterприведи конкретный пример
Подскажите, как упаковать число в юникод
>>> chr(0x20) ' ' >>> chr(0x1234) 'ሴ' >>>
>>> def f(n): ... return bytes(bytearray((n >> 8, n & 0xff))) ... >>> c = f(0xd0b0).decode('utf-8') >>> print c а >>> c u'\u0430' >>>
#-*- coding: utf-8 -*-
import re
def unic(match):
i = match.groups()[0]
return unichr(int(i, 16))
str = "порно"
p = re.compile(r"&#x([0-9A-F]+);")
result = p.sub(unic, str)
print result
>>> import re >>> >>> s = "порно" >>> >>> lst = re.findall(r'[0-9a-f]+', s, re.I) >>> us = u''.join(unichr(int(i, 16)) for i in lst) >>> us u'\u043f\u043e\u0440\u043d\u043e' >>>
>>> import re >>> >>> s = "abcпоdefрabcноdef" >>> >>> us = re.sub(ur'&#x([0-9a-fA-F]+);', ... lambda mo: unichr(int(mo.group(1), 16)), ... unicode(s)) >>> us u'abc\u043f\u043edef\u0440abc\u043d\u043edef' >>>
>>> import re >>> >>> s = "abcпоdefрabcноdef" >>> >>> us = re.sub(r'&#x([0-9a-fA-F]+);', ... lambda mo: unichr(int(mo.group(1), 16)), ... s) >>> us u'abc\u043f\u043edef\u0440abc\u043d\u043edef' >>>
так тоже работает, но непонятно, почему преобразуется к юникодовой строке (наверное, из-за юникодового значения у функции)Может потому что в третьем питоне все строки юникодные
>>> import re >>> >>> re.sub(u'.', 'r', u's') u'r' >>>
>>> import re >>> >>> re.sub('.', b'r', 's') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.3/re.py", line 170, in sub return _compile(pattern, flags).sub(repl, string, count) TypeError: sequence item 0: expected str instance, bytes found >>>
>>> import re >>> >>> re.sub(b'.', b'r', b's') b'r' >>>
>>> import re >>> >>> re.sub('.', 'r', 's') 'r' >>>