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 подскажет развёрнутый ответ в реальном времени.