Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2012 14:36:18

an1s1
Зарегистрирован: 2012-08-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

UTF-8 в 1251

Есть utf=8 строка(“Абза́ц”) нужно преобразовать ее в 1251 кодировку. Как это сделать? Заранее благодарен.

Офлайн

#2 Авг. 23, 2012 14:37:12

an1s1
Зарегистрирован: 2012-08-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

UTF-8 в 1251

Забыл уточнить, питон 3.2

Офлайн

#3 Авг. 23, 2012 15:24:13

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Офлайн

#4 Авг. 24, 2012 01:21:31

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

UTF-8 в 1251

в cp1251 нет буквы а с ударением

>>> bytes(range(256)).decode('cp1251', 'replace')
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7fЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ\xa0ЎўЈ¤Ґ¦§Ё©Є«¬\xad®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя'
>>>



Офлайн

#5 Авг. 24, 2012 10:55:24

an1s1
Зарегистрирован: 2012-08-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

UTF-8 в 1251

py.user.next
в cp1251 нет буквы а с ударением

>>> bytes(range(256)).decode('cp1251', 'replace')
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7fЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ\xa0ЎўЈ¤Ґ¦§Ё©Є«¬\xad®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя'
>>>
Угу, вот поэтому и хочу в нее перевести(или есть вариант по-лучше избавится от ударения?). А в гугле не смог найти ничего для 3 ветки(может плохо искал или чего-то не понимаю).

Офлайн

#6 Авг. 24, 2012 13:24:03

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

UTF-8 в 1251

удаление ударения

для второго

>>> s = 'Абза́ц'
>>> s
'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xcc\x81\xd1\x86'
>>> s = s.replace('\xcc\x81', '')
>>> s
'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xd1\x86'
>>> print s
Абзац
>>>

для третьего
>>> s = 'Абза́ц'
>>> s.encode('utf-8')
b'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xcc\x81\xd1\x86'
>>> s = s.encode('utf-8').replace(b'\xcc\x81', b'').decode('utf-8')
>>> s
'Абзац'
>>> s.encode('utf-8')
b'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xd1\x86'
>>>

в третьем можно str.translate() применить для такого результата
простой str.replace() тоже подойдёт, скорее всего



Отредактировано py.user.next (Авг. 24, 2012 13:32:27)

Офлайн

#7 Авг. 24, 2012 13:32:35

an1s1
Зарегистрирован: 2012-08-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

UTF-8 в 1251

py.user.next
удаление ударения

для второго
>>> s = 'Абза́ц'
>>> s
'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xcc\x81\xd1\x86'
>>> s = s.replace('\xcc\x81', '')
>>> s
'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xd1\x86'
>>> print s
Абзац
>>>

для третьего
>>> s = 'Абза́ц'
>>> s.encode('utf-8')
b'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xcc\x81\xd1\x86'
>>> s = s.encode('utf-8').replace(b'\xcc\x81', b'').decode('utf-8')
>>> s
'Абзац'
>>> s.encode('utf-8')
b'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xd1\x86'
>>>
Спасибо, как оказалось, для 3 есть вариант по-проще:
>>> s = 'Абза́ц'
>>> b=b'\xcc\x81'
>>> s.replace(b.decode(),"")
'Абзац'

Офлайн

#8 Авг. 24, 2012 13:36:43

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

UTF-8 в 1251

>>> s = 'Абза́ц'
>>> s.encode('utf-8')
b'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xcc\x81\xd1\x86'
>>> s = s.replace('а́', 'а')
>>> s.encode('utf-8')
b'\xd0\x90\xd0\xb1\xd0\xb7\xd0\xb0\xd1\x86'
>>>
вот такой вариант имел в виду



Отредактировано py.user.next (Авг. 24, 2012 13:38:52)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version