Hardstringunicode
Как работают строки в Python (Unicode)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Python 3 str — последовательность Unicode code points (не bytes). Внутри — компактные представления: 1/2/4 byte/char. bytes — последовательность байтов для binary data и I/O.
# str ↔ bytes через encode/decode
'café'.encode('utf-8') # b'caf\xc3\xa9'
b'caf\xc3\xa9'.decode('utf-8') # 'café'
ord('A') # 65 (code point)
chr(65) # 'A'
# Code point vs grapheme (визуальный символ)
len('😀') # 1 code point
len('👨👩👧') # 8 code points (emoji + ZWJ) — один grapheme!
# Normalization
import unicodedata
unicodedata.normalize('NFC', 'café') # composed form- UTF-8 — variable-length, совместим с ASCII; UTF-16/UTF-32 — с BOM;
- Surrogates в UTF-16 — две 16-bit единицы для code points > U+FFFF;
open(f, encoding='utf-8')обязательно для portability;re.UNICODEпо умолчанию в Python 3.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.