Что делает символ «b» перед строковым литералом? Ru Python
- Ru Python
- binary python string unicode
- Что делает символ «b» перед строковым литералом?
По-видимому, следующий синтаксис …
my_string = b'The string'
Я бы хотел знать…
- Что означает этот символ
b
символа строки? - Каковы последствия его использования?
- Каковы подходящие ситуации для его использования.
Я нашел связанный вопрос прямо здесь, на SO, но этот вопрос касается PHP, хотя и указывает, что b
используется для указания, что строка является двоичной, а не unicode, которая необходима для того, чтобы код был совместим с версией PHP <6 при переносе на PHP 6. Я не думаю, что это относится к Python.
Я нашел эту документацию на сайте python об использовании символа u
в том же синтаксисе, чтобы указать строку как unicode. К сожалению, он не упоминает символ b нигде в этом документе.
Кроме того, только из любопытства, есть ли больше символов, чем b
и u
которые делают другие вещи?
- Чтение двоичного файла с определенной последовательностью в Python
- Размер буфера VS Размер файла при чтении двоичного файла в Python
- Список битов Python в список байтов
- Файл Python IO ‘w’ vs ‘wb’
- Проблема чтения двоичных файлов Python
Чтобы процитировать документацию Python 2.x :
Префикс «b» или «B» игнорируется в Python 2; он указывает, что литерал должен быть литералом байтов в Python 3 (например, когда код автоматически преобразуется с 2to3). Префикс ‘u’ или ‘b’ может сопровождаться префиксом ‘r’.
В документации Python 3.3 указано:
Литералы байтов всегда имеют префикс «b» или «B»; они генерируют экземпляр типа байтов вместо типа str. Они могут содержать только символы ASCII; байты с числовым значением 128 или выше должны быть выражены с помощью экранов.
Python 3.x делает четкое различие между типами:
-
str
='...'
literals = последовательность символов Unicode (UTF-16 или UTF-32, в зависимости от того, как был скомпилирован Python) -
bytes
=
literals = последовательность октетов (целые числа от 0 до 255)
Если вы знакомы с Java или C #, подумайте о str
как String
и bytes
as byte[]
. Если вы знакомы с SQL, NVARCHAR
str
как NVARCHAR
а bytes
– BINARY
или BLOB
. Если вы знакомы с реестром Windows, подумайте о str
как REG_SZ
и bytes
как REG_BINARY
. Если вы знакомы с C (++), забудьте все, что вы узнали о char
и строках, потому что ХАРАКТЕР НЕ БЫТЬ . Эта идея давно устарела.
Вы используете
когда хотите представить текст.
print('שלום עולם')
Вы используете bytes
когда хотите представлять низкоуровневые двоичные данные, такие как structs.
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]
Вы можете кодировать str
в объект bytes
.
>>> '\uFEFF'.encode('UTF-8') b'\xef\xbb\xbf'
И вы можете декодировать bytes
в str
.
>>> b'\xE2\x82\xAC'.decode('UTF-8') '€'
Но вы не можете свободно смешивать два типа.
>>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str
Обозначение b'...'
несколько сбивает с толку, поскольку оно позволяет указать байты 0x01-0x7F с символами ASCII вместо шестнадцатеричных чисел.
>>> b'A' == b'\x41' True
Но я должен подчеркнуть, что персонаж не байт .
>>> 'A' == b'A' False
В версиях версии Python версии 3.0 не было такого различия между текстовыми и двоичными данными. Вместо этого было:
-
unicode
=u'...'
literals = последовательность символов Unicode = 3.xstr
-
str
='...'
litals = последовательности смешанных байтов / символов- Обычно текст, закодированный в некоторой неопределенной кодировке.
- Но также используется для представления двоичных данных, таких как
struct.pack
output.
Чтобы облегчить переход 2.x-to-3.x, синтаксис b'...'
был передан в Python 2.6, чтобы позволить различать двоичные строки (которые должны быть bytes
в 3.x) из текста строки (которые должны быть str
в 3.x). Префикс
ничего не делает в 2.x, но говорит сценарию 2to3
не преобразовывать его в строку Unicode в 3.x.
Так что да, b'. ..'
литералы в Python имеют ту же цель, что и в PHP.
Кроме того, только из любопытства, есть ли больше символов, чем b и u, которые делают другие вещи?
Префикс r
создает необработанную строку (например, r'\t'
– обратная косая черта + t
вместо вкладки), а тройные кавычки '''...'''
или """..."""
позволяют multi Строковые литералы.
B обозначает байтовую строку.
Байт – это фактические данные. Строки – это абстракция.
Если у вас был многосимвольный строковый объект, и вы взяли один символ, это будет строка, и размер может быть более 1 байта в зависимости от кодировки.
Если взять 1 байт с байтовой строкой, вы получите одно 8-битное значение от 0-255, и оно может не представлять полный символ, если эти символы из-за кодирования были> 1 байт.
TBH Я бы использовал строки, если у меня не было определенной причины низкого уровня использования байтов.
Он превращает его в bytes
литерал (или str
в 2.x) и действителен для 2.6+.
Префикс r
вызывает обратную косую черту как «неинтерпретированную» (не игнорируется, и разница имеет значение).
Вот пример, в котором отсутствие «b» генерирует исключение TypeError в Python 3.x
>>> f=open("new", "wb") >>> f.write("Hello Python!") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' does not support the buffer interface
Добавление префикса ‘b’ устранит проблему.
- Понимание оператора Python «is»
- Как передать переменную по ссылке?
- Python: логический список двоичной строки
- Python – лучший способ найти 1d-центр массы в двоичном массиве numpy
- django: возвращает данные изображения из вида
- чтение определенных цифр из двоичных данных
- Получение исходного двоичного представления файла в Python
- Отрицательное целое число до 32-битного двоичного кода
- Python – как открыть удаленный файл в двоичном режиме чтения?
- как xOR двоичный с python
- Декомпрессия и чтение файлов Dukascopy . bi5
Что такое b String в Python?
Данные байта составляют строку Python b, что подразумевает, что литерал, представляющий целые числа, находится в диапазоне от 0 до 255. Тип данных строки Python b и строки Python значительно различается. Литералы типа данных bytes в строке Python b представляют значения от 0 до 255, тогда как традиционная строка содержит последовательность символов Unicode, таких как UTF-16 или UTF-32. В Python строки используются для представления текстовых данных и заключаются в одинарные или двойные кавычки. Экземпляр строки выглядит так:
# my_str = “This is a sample string”
Строки представляют данные, которые люди могут читать, такие как буквы, специальные символы, слова или почти что-нибудь еще, тогда как байты используются для представления низкоуровневых двоичных структур данных. Типы данных str и bytes в Python 2.x являются объектами типа Byte, но в Python 3.x это изменилось. Байты и строка различаются в первую очередь потому, что байты машиночитаемы, тогда как строка читается человеком, а текст в конечном итоге переводится в байты для обработки.
При добавлении префикса b к обычной строке Python тип данных был изменен со строки на байты. Строки можно преобразовать в байты, что называется кодированием, а преобразование байтов в строку называется декодированием. Чтобы лучше понять эту концепцию, давайте обсудим несколько примеров.
Содержание
- Пример 1
- Пример 2
- Пример 3
- Заключение
Пример 1
Байты относятся к литералам, представляющим значения от 0 до 255, тогда как str относятся к литералам, содержащим серию символов Юникода (закодированных в UTF-16 или UTF-32, в зависимости от компиляции Python). Мы изменили тип данных стандартной строки со строки на байты, добавив к ней префикс b. Предположим, у вас есть две строки str_one = ’Alex’ и string_two = b’Alexa ’
Что вы думаете? Эти двое похожи или разные? Различие в типе данных. Давайте посмотрим на типы обеих строковых переменных.
str_one = ‘Alex’
print(type(str_one))
str_two = b‘Alexa’
print(type(str_two))
Когда вышеупомянутый код запускается, создается следующий вывод.
Пример 2
Процедура, называемая кодированием, используется для преобразования строк в байты. Для преобразования байтов в строки можно использовать процедуру, известную как декодирование. Рассмотрим следующий пример:
В этом примере будет использоваться метод decode (). Функция преобразует схему шифрования, используемую для шифрования строки аргумента, в схему кодирования, используемую для кодирования строки аргумента, в выбранную схему шифрования. Эффект прямо противоположен кодированию. Давайте посмотрим на иллюстрацию и разберемся, как работает эта функция.
my_str = b‘Decoration’
print(‘\n\n Input:’)
print(my_str)
print(type(my_str))
result = my_str.decode()
print(‘\n\n Output:’)
print(result)
print(type(result))
Результат вышеупомянутого кода будет выглядеть примерно так.
Для начала мы сохранили строку ввода со значением «Украшение» в переменной my_str. Затем был представлен тип данных строки, а также входная строка. Затем использовалась функция decode (), и результат был сохранен в переменной результата. Наконец, мы записали строку в переменной результата и тип данных переменной. В итоге видно финал.
Пример 3
В нашем третьем примере мы преобразовали строки в байты. Сначала мы напечатали слово в приведенном ниже коде. Эта строка имеет длину 2. Поскольку это строка была закодирована с использованием функции encode () в следующей строке, что дало результат b ’\ xc3 \ x961′. Приведенная ниже закодированная строка имеет длину 3 байта, как указано в третьей строке кода.
print(‘Öl’)
print(‘Öl’.encode(‘UTF-8’))
print(len(‘Öl’.encode(‘UTF-8’)))
Вот результат после того, как мы выполнили программу.
Заключение
Теперь вы знаете концепцию строки ab в Python и как преобразовывать байты в строки и наоборот в Python из этой статьи. Мы рассмотрели подробный пример преобразования байтов в строки и строки в байты. Все методы хорошо объяснены примерами.
Эффект символа «b» перед строковым литералом в Python
Улучшить статью
Сохранить статью
Нравится Статья
indorexian
автор
6 опубликованных статей
Улучшить статью
Сохранить статью
Нравится Статья
В Python символ ‘ b ’ перед строкой используется для указания строки как « байтовая строка ».
Например:
b_str = b’Эй, я байтовая строка’
Теперь b_str хранит не объект String, а объект байтовой строки.
Разница между строками и байтовыми строками:
Строки — это обычные символы в удобочитаемом формате, тогда как байтовые строки — это строки в байтах. Как правило, строки сначала преобразуются в байты, как и любой другой объект, потому что компьютер может хранить данные только в байтах. При работе с байтовыми строками они не конвертируются в байты , так как они уже в байтах .
Как строки преобразуются в байты?
Строки преобразуются в байты с использованием кодировки. Существуют различные форматы кодирования, с помощью которых строки могут быть преобразованы в байты. Например. ASCII, UTF-8 и т. д.
Чтобы преобразовать строку в байтовую строку в Python:
Python3
var = 'Привет Я строка' .encode( 'ASCII' ) print (var) |
b'Эй, я строка'
Если мы даже напечатаем тип переменной, мы получим тип байт :
Python3
var = «Эй, я строка» .encode( 900 65 ‘ASCII’ ) печать ( тип (var)) |
<класс 'bytes'>
Как байтовый объект преобразуется в строку?
Точно так же, как кодирование используется для преобразования строки в байт, мы используем декодирование для преобразования байта в строку: b 'Привет, я Строка байтов'
. decode(
'ASCII'
)
print
(var)
Output Hey I am a Byte String
Если мы даже напечатаем тип переменная, мы получим строку типа :
Python3
var = b .decode( 'ASCII' ) печать ( тип (var)) |
Последнее обновление: 15 июн, 2022
Нравится статья
Сохранить статью
python — Что делает символ «b» перед строковым литералом?
Python 3.x делает четкое различие между типами:
-
str
='...'
литералы = последовательность символов Unicode (Latin-1, UCS-2 или UCS-4, в зависимости от самый широкий символ в строке) -
байт
=b'.
литералы = последовательность октетов (целые числа от 0 до 255)
Если вы знакомы с:
- Java или C#, подумайте о
str
как оString
иbytes
как оbyte[]
; - SQL, подумайте о
str
как оNVARCHAR
иbytes
как оBINARY
илиBLOB
; - Реестр Windows, подумайте о
str
как оREG_SZ
ибайт
какREG_BINARY
.
Если вы знакомы с C(++), то забудьте все, что вы узнали о char
и строках, потому что символ не является байтом . Эта идея давно устарела.
Вы используете str
, когда хотите представить текст.
print('שלום עולם')
Вы используете байт
, когда хотите представить низкоуровневые двоичные данные, такие как структуры.
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]
Вы можете закодировать str
в объект размером байт
.
>>> '\uFEFF'.encode('UTF-8') б'\xef\xbb\xbf'
И вы можете декодировать байт
в str
.
>>> b'\xE2\x82\xAC'.decode('UTF-8') '€'
Но вы не можете свободно смешивать эти два типа.
>>> b'\xEF\xBB\xBF' + 'Текст со спецификацией UTF-8' Traceback (последний последний вызов): Файл "", строка 1, в TypeError: невозможно объединить байты в строку
Нотация b'...'
несколько сбивает с толку, поскольку позволяет указывать байты 0x01-0x7F с помощью символов ASCII вместо шестнадцатеричных чисел.
>>> b'A' == b'\x41' Истинный
Но я должен подчеркнуть, символ не является байтом .
>>> 'А' == б'А' ЛОЖЬ
В версиях Python до 3.0 не было такого различия между текстовыми и двоичными данными. Вместо этого было:
-
юникод
=u'...'
литералы = последовательность символов Unicode = 3.xstr
-
str
='.