Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2014 13:45:21

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

кодировка строки

Добрый день!
Библиотека twisted возвратила мне такую штуку:

type(s)
<type 'str'>
>>> s
'\x04B\x045\x04A\x04B\x00\r\x00\n'
Я предполагаю, что там содержится слово ‘тест’. Сохранил эту переменную в бинарный файл, вот такое получилось HEX:
0442 0435 0441 0442 000d 000d 0a
Как это перекодировать в обычную строку:
>>> print s.decode('utf-8')
B5AB
Python 2.7 Win32. Столкнувшись с этой проблемой я прочитал главу из книги Питон. Самое необходимое. Там говорится о кодировках, и приводится такой пример:
>>> s = unicode('тест', 'utf-8')
>>> s
u'\u0442\u0435\u0441\u0442'
>>> s.decode('utf-8', "ignore")
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
может я меня питон как-то не правильно установлен? Хотя я сделал несколько программ работающих с файловой системой, все работало…

Офлайн

#2 Сен. 1, 2014 14:02:24

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

кодировка строки

Pr_Alexey
Я предполагаю, что там содержится слово ‘тест’.
>>> 'тест'
'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82'
>>> print('\x04B\x045\x04A\x04B\x00\r\x00\n')
B5AB

Pr_Alexey
Как это перекодировать в обычную строку:
Это необычная строка, а Unicode.



Отредактировано Budulianin (Сен. 1, 2014 14:29:53)

Офлайн

#3 Сен. 1, 2014 16:09:24

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

кодировка строки

Budulianin
Это необычная строка, а Unicode.
Разве уникод строки не должы начинаться на u? К тому же я сделал для нее type (см. выше), пишет что str. Как-то запутался. В общем моя цель: преобразовать это в строку str в utf-8 кодировке.

Офлайн

#4 Сен. 1, 2014 16:16:27

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

кодировка строки

Pr_Alexey
Разве уникод строки не должы начинаться на u?
Ты “принтуешь”
>>> print(u'asd')
asd
Pr_Alexey
print s.decode('utf-8')

Декодируешь в Unicode из utf-8

Pr_Alexey
В общем моя цель: преобразовать это в строку str в utf-8 кодировке.
У тебя и так тип str и скорее всего кодировка utf-8



Отредактировано Budulianin (Сен. 1, 2014 16:20:07)

Офлайн

#5 Сен. 1, 2014 17:07:37

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

кодировка строки

Pr_Alexey
Разве уникод строки не должы начинаться на u?
Если вы хотите, то вы можете напечатать юникодовые строки как последовательность символов \uXXXX.
Также их можно декодировать:
>>> print u'тест'.encode('unicode-escape')
\u0442\u0435\u0441\u0442
>>> print '\u0442\u0435\u0441\u0442'.decode('unicode-escape')
тест
>>>

Скорей всего, у вас в LineReceiver стоит delimeter = ‘\n’ вместо ‘\r\n’, потому строка к вам приходит с символом \x04 (EOT). Или же вы должны посылать данные без ‘\r’

Офлайн

#6 Сен. 1, 2014 21:33:43

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

кодировка строки

>>> b'\x04B\x045\x04A\x04B\x00\r\x00\n'.decode('utf-16be')
'тест\r\n'
>>>



Офлайн

#7 Сен. 1, 2014 21:57:00

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

кодировка строки

Откуда там такая кодировка? Специфичный проц? Или это заголовок какого-то протокола?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version