Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2017 13:51:37

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

str() от b'...' в python 3

Верно ли понимаю, что в python 3 вызов str(b'…..') всегда возвращает строку в utf8?

Офлайн

#2 Сен. 21, 2017 14:28:27

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

str() от b'...' в python 3

Прочитай документацию
python.org. str

То, что ты делаешь, вообще возвращает repr() байтового объекта

  
>>> str(b'abc')
"b'abc'"
>>>



Офлайн

#3 Сен. 21, 2017 14:55:45

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

str() от b'...' в python 3

Спасибо, ответ найден в параметрах str() - она всегда возвращает результат в utf8 если в параметре encoding не указано иное.
P.S. b'…' взят для примера, нужно было мне лучше описать сабж чтоб не путать.

Отредактировано WhiteTiger (Сен. 21, 2017 14:59:14)

Офлайн

#4 Сен. 21, 2017 20:23:11

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

str() от b'...' в python 3

WhiteTiger
Спасибо, ответ найден в параметрах str()
Докажите утверждение. Похоже ответ не найден. Строка возвращает unicode а не utf-8.



Офлайн

#5 Сен. 21, 2017 20:31:48

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

str() от b'...' в python 3

https://docs.python.org/3/library/stdtypes.html#str

str(object=b”, encoding=’utf-8’, errors=’strict’)
if object is a bytes (or bytearray) object, then str(bytes, encoding, errors) is equivalent to bytes.decode(encoding, errors)

Офлайн

#6 Сен. 21, 2017 21:42:11

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

str() от b'...' в python 3

WhiteTiger
она всегда возвращает результат в utf8 если в параметре encoding не указано иное.

В приведенном вами фрагменте который вы считаете доказательством указано что действие эквивалентно decode
Там не написано что результат будет в utf-8 кодировке.

Объясните тогда такое поведение:
 >>> str(3,encoding="utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: coercing to str: need a bytes-like object, int found
>>> str(3)
'3'



Отредактировано doza_and (Сен. 21, 2017 21:42:37)

Офлайн

#7 Сен. 21, 2017 21:52:11

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

str() от b'...' в python 3

WhiteTiger
нет, str возвращает строковый объект, который является Unicode объектом. В этом месте не существует кодировок. А вот то что вы даже сами процитировали и есть преобразование массива байт, в которых есть текст, который кодирован кодировкой utf-8, в объект str.
Смотрите, вот есть файл. Это массив байт в общем то. В нем содержится картинка. В какой кодировке этот файл? Да в общем то ни в какой - там же текст,а не картинка. А вот другой файл, там точно текст. В какой кодировке этот файл? Ну на нем не написано - все что мы можем знать о нем что это набор байт, который можно преобразовать в набор символов, причем не абы каких, а тех из которых получится осмысленный текст.
Вот вы из массива байт ( b'blabla\x00\x0F') получаете набор символов (str), и в этом массиве байт был текст который преобразуя кодировкой UTF-8 становится набором символов. у которых нет кодировок



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version