#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 внутренне, декодируя входные данные как можно скорее и кодируя выходные данные только в конце «.