Найти - Пользователи
Полная версия: str() от b'...' в python 3
Начало » Python для новичков » str() от b'...' в python 3
1
WhiteTiger
Верно ли понимаю, что в python 3 вызов str(b'…..') всегда возвращает строку в utf8?
py.user.next
Прочитай документацию
python.org. str

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