WhiteTiger
Сен. 21, 2017 13:51:37
Верно ли понимаю, что в python 3 вызов str(b'…..') всегда возвращает строку в utf8?
py.user.next
Сен. 21, 2017 14:28:27
Прочитай документацию
python.org. strТо, что ты делаешь, вообще возвращает repr() байтового объекта
>>> str(b'abc')
"b'abc'"
>>>
WhiteTiger
Сен. 21, 2017 14:55:45
Спасибо, ответ найден в параметрах str() - она всегда возвращает результат в utf8 если в параметре encoding не указано иное.
P.S. b'…' взят для примера, нужно было мне лучше описать сабж чтоб не путать.
doza_and
Сен. 21, 2017 20:23:11
WhiteTiger
Спасибо, ответ найден в параметрах str()
Докажите утверждение. Похоже ответ не найден. Строка возвращает unicode а не utf-8.
doza_and
Сен. 21, 2017 21:42:11
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'
JOHN_16
Сен. 21, 2017 21:52:11
WhiteTiger
нет, str возвращает строковый объект, который является Unicode объектом. В этом месте не существует кодировок. А вот то что вы даже сами процитировали и есть преобразование массива байт, в которых есть текст, который кодирован кодировкой utf-8, в объект str.
Смотрите, вот есть файл. Это массив байт в общем то. В нем содержится картинка. В какой кодировке этот файл? Да в общем то ни в какой - там же текст,а не картинка. А вот другой файл, там точно текст. В какой кодировке этот файл? Ну на нем не написано - все что мы можем знать о нем что это набор байт, который можно преобразовать в набор символов, причем не абы каких, а тех из которых получится осмысленный текст.
Вот вы из массива байт ( b'blabla\x00\x0F') получаете набор символов (str), и в этом массиве байт был текст который преобразуя кодировкой UTF-8 становится набором символов. у которых нет кодировок