Что такое 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?