Как правильно работать с типами string и bytes?

#python #python-3.x

#python #python-3.x

Вопрос:

Изначально Python3 и некоторые сторонние библиотеки, похоже, имеют разные подходы к возврату либо строки, либо байтов. Существует ли фактический способ обработки этих двух разных типов? Мне кажется естественным работать как можно больше только с одним из типов в коде (сохранять байты только на границах), но я не уверен, имеет ли это смысл.

Комментарии:

1. str.encode() должно работать для преобразования строки в байт, и bytes.decode() должно работать для преобразования байта в строку. При необходимости вы можете указать аргумент для указания кодировки, которая используется 'UTF-8' по умолчанию.

2. ДА. Если вы хотите работать с текстом, то вам следует использовать str . Если вам нужно работать с двоичными данными, используйте bytes

3. Спасибо вам обоим за ответы, мой вопрос в основном касается общей практики. Я хотел бы избежать повсеместного кодирования и декодирования в моем коде (см. Мое предположение в вопросе), но я хотел бы получить больше мыслей по этой проблеме.

Ответ №1:

Этот вопрос несколько расплывчатый, не могли бы вы предоставить более подробный контекст? Возможно, вы захотите взглянуть на 1, который рекомендует следующее для разработки с помощью Python3

Байты снаружи, юникод внутри, кодирование / декодирование по краям

Комментарии:

1. Спасибо, что поделились ссылкой, мой вопрос намеренно расплывчатый, я искал некоторые общие рекомендации от сообщества.

Ответ №2:

Я не знаю ни о каком «стандартном» способе обработки строк и байтовых строк, но у вас могла бы быть подобная функция, чтобы убедиться, что все, что вы используете, является строкой (или байтами)

 # To always have strings:
def get_string(s):
    if type(s) == 'bytes':
        return s.decode()
    return s

# To always have bytes:
def get_bytes(s):
    if type(s) == 'str':
        return s.encode()
    return s
  

Ответ №3:

Если вы хотите манипулировать текстом, используйте strings, поскольку это более прямолинейно, если только у вас нет конкретного варианта использования, когда манипулирование двоичными данными имеет важное значение, например, манипулирование различными кодировками, шифрами или двоичными файлами строк.

Ответ №4:

Я нашел официальную рекомендацию:https://docs.python.org/3/howto/unicode.html#tips-for-writing-unicode-aware-programs:

» Программное обеспечение должно работать только со строками Unicode внутренне, декодируя входные данные как можно скорее и кодируя выходные данные только в конце «.