Найти - Пользователи
Полная версия: кодировка строки
Начало » Python для новичков » кодировка строки
1
Pr_Alexey
Добрый день!
Библиотека 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)
может я меня питон как-то не правильно установлен? Хотя я сделал несколько программ работающих с файловой системой, все работало…
Budulianin
Pr_Alexey
Я предполагаю, что там содержится слово ‘тест’.
>>> 'тест'
'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82'
>>> print('\x04B\x045\x04A\x04B\x00\r\x00\n')
B5AB

Pr_Alexey
Как это перекодировать в обычную строку:
Это необычная строка, а Unicode.
Pr_Alexey
Budulianin
Это необычная строка, а Unicode.
Разве уникод строки не должы начинаться на u? К тому же я сделал для нее type (см. выше), пишет что str. Как-то запутался. В общем моя цель: преобразовать это в строку str в utf-8 кодировке.
Budulianin
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
GreyZmeem
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’
py.user.next
>>> b'\x04B\x045\x04A\x04B\x00\r\x00\n'.decode('utf-16be')
'тест\r\n'
>>>
Budulianin
Откуда там такая кодировка? Специфичный проц? Или это заголовок какого-то протокола?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB