Функция utf8.RuneLen

Функция utf8.RuneLen определяет длину в байтах для переданной руны в кодировке UTF-8. В качестве единственного параметра она принимает значение типа rune и возвращает целое число — количество байт (от 1 до 4), которое занимает эта руна в UTF-8.

Если переданное значение не является допустимой кодовой точкой Unicode, функция вернет -1. Это полезно для проверки валидности рун перед их кодированием или записью в байтовый буфер.

Синтаксис

goutf8.RuneLen(r)

Пример

Определим длину в байтах для латинской буквы 'a':

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  r := 'a'
  res := utf8.RuneLen(r)
  fmt.Println(res)
}

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

go1

Пример

Определим длину в байтах для кириллической буквы 'Я':

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  r := 'Я'
  res := utf8.RuneLen(r)
  fmt.Println(res)
}

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

go2

Пример

Определим длину в байтах для иероглифа '𠀋' (U+2000B):

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  r := '𠀋'
  res := utf8.RuneLen(r)
  fmt.Println(res)
}

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

go4

Пример

Проверим поведение функции на невалидном значении (например, суррогатная пара):

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  r := rune(0xDC00) // невалидная кодовая точка
  res := utf8.RuneLen(r)
  fmt.Println(res)
}

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

go-1

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

  • функцию utf8.RuneCount,
    которая считает количество рун в байтовом слайсе
  • функцию utf8.RuneCountInString,
    которая считает количество рун в строке
  • функцию utf8.DecodeRune,
    которая декодирует первую руну из байтового слайса
  • функцию utf8.EncodeRune,
    которая кодирует руну в байтовый слайс