Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2014 23:55:35

Dartanyan
Зарегистрирован: 2013-01-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

У знакомого программист конвертировал кирилические имена в юникод и вот что вышло
#U0441#U0430#U0434 вместо слова сад.

Итерировать и переименовать не проблема, а вот конвертировать из этого чуда уже проблема(.

Офлайн

#2 Июль 2, 2014 00:37:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

>>> s = '#U0441#U0430#U0434'
>>> 
>>> out = ''.join(chr(int(i, 16)) for i in s.split('#U') if i)
>>> out
'сад'
>>>



Офлайн

#3 Июль 2, 2014 01:13:29

Dartanyan
Зарегистрирован: 2013-01-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

осталось только решить вопрос с редкими цыфрами в конце строки иначе летит все в пух и прах.

Офлайн

#4 Июль 2, 2014 06:39:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

Приведи пример строк, для которых не срабатывает.



Офлайн

#5 Июль 2, 2014 11:29:58

Dartanyan
Зарегистрирован: 2013-01-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

#U0425#U043e#U043b#U043b1 цыфра может быть везде (

Офлайн

#6 Июль 2, 2014 11:35:39

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

>>> s = '#U0425#U043e#U043b#U043b1'
>>> ''.join(chr(int(i, 16)) for i in s.split('#U') if i)
'Хол䎱'
>>> 

Офлайн

#7 Июль 2, 2014 15:44:48

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Работа с файлами unicode type

Ну там видимо отсечь надо

 ''. join(chr(int(i[:4], 16)) for i in s . split( '#U' ) if i) 

Офлайн

#8 Июль 2, 2014 15:49:44

Dartanyan
Зарегистрирован: 2013-01-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

Решил так, работает но только в 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])

dimy44 решил также, но сам но вот с беда с 2 питоном

Отредактировано Dartanyan (Июль 2, 2014 15:51:32)

Офлайн

#9 Июль 2, 2014 16:45:44

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Работа с файлами unicode type

Наверно запары с chr, попробуйте

 print(''.join(unichr(int(i[:4], 16)).encode('utf-8')+i[4:] for i in s.split('#U') if i)) 

Офлайн

#10 Июль 2, 2014 19:45:09

Dartanyan
Зарегистрирован: 2013-01-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлами unicode type

dimy44 заработало, все )

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version