Форум сайта python.su
Верно ли понимаю, что в python 3 вызов str(b'…..') всегда возвращает строку в utf8?
Офлайн
Прочитай документацию
python.org. str
То, что ты делаешь, вообще возвращает repr() байтового объекта
>>> str(b'abc') "b'abc'" >>>
Офлайн
Спасибо, ответ найден в параметрах str() - она всегда возвращает результат в utf8 если в параметре encoding не указано иное.
P.S. b'…' взят для примера, нужно было мне лучше описать сабж чтоб не путать.
Отредактировано WhiteTiger (Сен. 21, 2017 14:59:14)
Офлайн
WhiteTigerДокажите утверждение. Похоже ответ не найден. Строка возвращает unicode а не utf-8.
Спасибо, ответ найден в параметрах str()
Офлайн
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)
Офлайн
WhiteTiger
она всегда возвращает результат в utf8 если в параметре encoding не указано иное.
>>> 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)
Офлайн
WhiteTiger
нет, str возвращает строковый объект, который является Unicode объектом. В этом месте не существует кодировок. А вот то что вы даже сами процитировали и есть преобразование массива байт, в которых есть текст, который кодирован кодировкой utf-8, в объект str.
Смотрите, вот есть файл. Это массив байт в общем то. В нем содержится картинка. В какой кодировке этот файл? Да в общем то ни в какой - там же текст,а не картинка. А вот другой файл, там точно текст. В какой кодировке этот файл? Ну на нем не написано - все что мы можем знать о нем что это набор байт, который можно преобразовать в набор символов, причем не абы каких, а тех из которых получится осмысленный текст.
Вот вы из массива байт ( b'blabla\x00\x0F') получаете набор символов (str), и в этом массиве байт был текст который преобразуя кодировкой UTF-8 становится набором символов. у которых нет кодировок
Офлайн