Преобразование строки (str) в последовательность байт (bytes) по определенным правилам (кодировке)
Обратный процесс - преобразование байт (bytes) в строку (str)
text = "Привет, мир!" # Строка Unicode
encoded = text.encode('utf-8') # Кодируем в UTF-8
print(encoded) # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82, \xd0\xbc\xd0\xb8\xd1\x80!'
Параметры encode():
encoding
- название кодировки (обязательный)errors
- обработка ошибок ('strict', 'ignore', 'replace' и др.)decoded = encoded.decode('utf-8') # Декодируем из UTF-8
print(decoded) # "Привет, мир!"
# UTF-8 (Unicode)
"Hello".encode('utf-8') # b'Hello'
# ASCII (только английские символы)
"ABC".encode('ascii') # b'ABC'
# Windows-1251 (кириллица)
"Привет".encode('cp1251') # b'\xcf\xf0\xe8\xe2\xe5\xf2'
# Latin-1 (ISO-8859-1)
"é".encode('latin-1') # b'\xe9'
# 'strict' (по умолчанию) - вызовет UnicodeEncodeError
" café ".encode('ascii') # Ошибка: символ 'é' не в ASCII
# 'ignore' - пропустит проблемные символы
" café ".encode('ascii', errors='ignore') # b' caf '
# 'replace' - заменит на ?
" café ".encode('ascii', errors='replace') # b' caf? '
# Пример битых данных
broken_bytes = b'\xd0\x9f\xd1\x80\xd0\xb8\xd0'
# 'strict' (по умолчанию) - UnicodeDecodeError
broken_bytes.decode('utf-8') # Ошибка
# 'ignore' - пропустит битые байты
broken_bytes.decode('utf-8', errors='ignore') # "При"
# 'replace' - заменит на (U+FFFD)
broken_bytes.decode('utf-8', errors='replace') # "При�"
import chardet
data = b'\xd0\x9f\xd1\x80\xd0\xb8'
result = chardet.detect(data)
print(result) # {'encoding': 'utf-8', 'confidence': 0.99}
import transliterate
text = "Привет"
translit = transliterate.translit(text, reversed=True)
print(translit) # "Privet"
# Чтение с указанием кодировки
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
# Запись с указанием кодировки
with open('file.txt', 'w', encoding='cp1251') as f:
f.write("Текст в windows-1251")
# Чтение бинарных данных с последующим декодированием
with open('file.txt', 'rb') as f:
binary_data = f.read()
text = binary_data.decode('utf-8-sig') # -sig для BOM
from urllib.parse import quote, unquote
url = "https://example.com/привет"
encoded_url = quote(url, safe='/:')
print(encoded_url) # "https://example.com/%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82"
decoded_url = unquote(encoded_url)
print(decoded_url) # Исходный URL
str.encode(encoding, errors)
- строка → байтыbytes.decode(encoding, errors)
- байты → строкаДля сложных сценариев используйте:
chardet
для определения кодировкиcodecs
для расширенных возможностей работы с кодировкамиurllib.parse
для URL-кодирования