Константа utf8.MaxRune

Константа utf8.MaxRune из пакета unicode/utf8 определяет максимальное значение кодовой точки в стандарте Unicode. Это значение равно 0x10FFFF, что соответствует последнему допустимому кодовому символу в Unicode. Константа часто используется при валидации рун, проверке допустимых значений символов и при работе с кодировкой UTF-8.

Синтаксис

goutf8.MaxRune

Пример

Давайте выведем значение константы utf8.MaxRune в различных системах счисления:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  fmt.Printf("Десятичное: %d\n", utf8.MaxRune)
  fmt.Printf("Шестнадцатеричное: 0x%X\n", utf8.MaxRune)
  fmt.Printf("Двоичное: %b\n", utf8.MaxRune)
}

Результат выполнения кода:

go"Десятичное: 1114111"
"Шестнадцатеричное: 0x10FFFF"
"Двоичное: 100001111111111111111"

Пример

Рассмотрим, как использовать utf8.MaxRune для проверки допустимости руны в цикле по строке:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  str := "Hello, 世界!"
  
  for _, r := range str {
    if r <= utf8.MaxRune {
      fmt.Printf("Руна '%c' допустима (код: %d)\n", r, r)
    } else {
      fmt.Printf("Руна '%c' недопустима\n", r)
    }
  }
}

Результат выполнения кода:

go"Руна 'H' допустима (код: 72)"
"Руна 'e' допустима (код: 101)"
"Руна 'l' допустима (код: 108)"
"Руна 'l' допустима (код: 108)"
"Руна 'o' допустима (код: 111)"
"Руна ',' допустима (код: 44)"
"Руна ' ' допустима (код: 32)"
"Руна '世' допустима (код: 19990)"
"Руна '界' допустима (код: 30028)"
"Руна '!' допустима (код: 33)"

Пример

Покажем, как использовать utf8.MaxRune для проверки корректности декодированной руны:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  data := []byte{0xF0, 0x9F, 0x8C, 0x8D} // символ 🌍
  r, size := utf8.DecodeRune(data)
  
  if r <= utf8.MaxRune {
    fmt.Printf("Руна: %c (код: %d, размер: %d байт)\n", r, r, size)
  } else {
    fmt.Printf("Недопустимая руна: %d\n", r)
  }
}

Результат выполнения кода:

go"Руна: 🌍 (код: 127757, размер: 4 байт)"

Смотрите также

  • константу utf8.RuneError,
    которая обозначает код ошибки для некорректных рун
  • константу utf8.RuneSelf,
    которая определяет границу между ASCII и многобайтовыми символами
  • функцию utf8.ValidRune,
    которая проверяет, является ли руна допустимой в Unicode
  • константу utf8.UTFMax,
    которая определяет максимальное количество байтов в кодировке UTF-8 (4 байта)