Работа с суррогатными символами в кодировке UTF-8: методы и примеры кода

Фраза «суррогатные символы UTF-8» относится к использованию суррогатных пар в кодировке UTF-8. Суррогатные пары используются для представления символов за пределами базовой многоязычной плоскости (BMP) в Юникоде. Вот несколько методов и примеров кода, связанных с суррогатными символами в UTF-8:

  1. Проверка того, является ли символ суррогатным:

    def is_surrogate(character):
    codepoint = ord(character)
    return 0xD800 <= codepoint <= 0xDFFF
    # Example usage
    print(is_surrogate('\uD83D'))  # True
    print(is_surrogate('A'))       # False
  2. Преобразование суррогатной пары в код Unicode:

    def surrogate_to_codepoint(high_surrogate, low_surrogate):
    high = ord(high_surrogate)
    low = ord(low_surrogate)
    codepoint = ((high - 0xD800) << 10) + (low - 0xDC00) + 0x10000
    return codepoint
    # Example usage
    print(hex(surrogate_to_codepoint('\uD83D', '\uDE00')))  # U+1F600
  3. Преобразование кодовой точки Юникода в суррогатную пару:

    def codepoint_to_surrogate(codepoint):
    codepoint -= 0x10000
    high_surrogate = chr((codepoint >> 10) + 0xD800)
    low_surrogate = chr((codepoint & 0x3FF) + 0xDC00)
    return high_surrogate, low_surrogate
    # Example usage
    high, low = codepoint_to_surrogate(0x1F600)
    print(high, low)  # '\uD83D', '\uDE00'

Эти методы и примеры кода демонстрируют, как работать с суррогатными символами в кодировке UTF-8. Суррогатные символы важны для представления символов таких языков, как китайский, японский и корейский, а также для эмодзи и других специальных символов.