Форум сайта python.su
0
У знакомого программист конвертировал кирилические имена в юникод и вот что вышло
#U0441#U0430#U0434 вместо слова сад.
Итерировать и переименовать не проблема, а вот конвертировать из этого чуда уже проблема(.
Офлайн
857
>>> s = '#U0441#U0430#U0434' >>> >>> out = ''.join(chr(int(i, 16)) for i in s.split('#U') if i) >>> out 'сад' >>>
Офлайн
0
осталось только решить вопрос с редкими цыфрами в конце строки
иначе летит все в пух и прах.
Офлайн
857
Приведи пример строк, для которых не срабатывает.
Офлайн
0
#U0425#U043e#U043b#U043b1 цыфра может быть везде (
Офлайн
88
>>> s = '#U0425#U043e#U043b#U043b1' >>> ''.join(chr(int(i, 16)) for i in s.split('#U') if i) 'Хол䎱' >>>
Офлайн
Ну там видимо отсечь надо
''. join(chr(int(i[:4], 16)) for i in s . split( '#U' ) if i)
Офлайн
0
Решил так, работает но только в 3 питоне в 2 вылетает (.
str = "#U0425#U043e#U043b#U043b1.jpg" s = str.split('.') print(''.join(chr(int(i[0:4], 16))+i[4:] for i in s[0].split('#U') if i)+'.'+s[1])
но вот с беда с 2 питоном
Отредактировано Dartanyan (Июль 2, 2014 15:51:32)
Офлайн
Наверно запары с chr, попробуйте
print(''.join(unichr(int(i[:4], 16)).encode('utf-8')+i[4:] for i in s.split('#U') if i))
Офлайн
0
dimy44 заработало, все )
Офлайн