Что такое Python bytestring?
Все, что я могу найти, - это темы о том, как кодировать для байта или декодирования до ascii
или utf-8
. Я пытаюсь понять, как это работает под капотом. В обычной строке ASCII это массив или список символов, и каждый символ представляет значение ASCII от 0 до 255, так что, как вы знаете, какой символ представлен числом. В Unicode это 8- или 16-байтовое представление для символа, которое сообщает вам, какой символ он имеет.
Итак, что такое bytestring? Как Python знает, какие символы представлять в качестве чего? Как это работает под капотом? Поскольку вы можете печатать или даже возвращать эти строки, и он показывает вам строковое представление, я не совсем понимаю его...
Хорошо, поэтому моя точка определенно пропущена здесь. Мне сказали, что это неизменная последовательность байтов без какой-либо конкретной интерпретации.
Последовательность байтов. Хорошо, скажем, один байт: 'a'.encode()
возвращает b'a'
.
Прост достаточно. Почему я могу прочитать a?
Скажем, я получил значение ASCII для a, выполнив следующее: printf "%d" "'a"
Он возвращает 97. Хорошо, хорошо, целочисленное значение для символа ASCII a. Если мы интерпретируем 97 как ASCII, скажем, в C char
, тогда получаем букву a
. Справедливо. Если мы преобразуем представление байта в биты, мы получим следующее:
01100001
2 ^ 0 + 2 ^ 5 + 2 ^ 6 = 97. Прохладный.
Итак, почему 'a'.encode()
возвращает b'a'
вместо 01100001
?
Если он без конкретной интерпретации, не должен ли он возвращать что-то вроде b'01100001'
?
Он кажется, как будто он интерпретирует его как ASCII.
Кто-то упомянул, что он вызывает __repr__
в байтовой строке, поэтому он отображается в форме, удобной для человека. Однако, даже если я делаю что-то вроде:
with open('testbytestring.txt', 'wb') as f:
f.write(b'helloworld')
Он по-прежнему будет вставлять helloworld
в качестве регулярной строки в файл, а не как последовательность байтов... Так что это байтовая строка в ASCII?