Функция utf8.RuneStart
Функция utf8.RuneStart проверяет, является ли переданный байт
началом корректного UTF-8 символа (руны). Она принимает один параметр -
байт типа byte и возвращает true, если этот байт может
быть началом руны. Функция полезна при проверке границ строк и
валидации UTF-8 данных.
Синтаксис
utf8.RuneStart(b byte) bool
Пример
Давайте проверим, является ли байт началом UTF-8 символа для
латинской буквы 'a' (ASCII символ, занимает 1 байт):
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
b := byte('a')
res := utf8.RuneStart(b)
fmt.Println(res)
}
Результат выполнения кода:
true
Пример
Теперь давайте проверим байт, который не является началом
UTF-8 символа (например, продолжение многобайтового символа).
Возьмем второй байт кириллической буквы 'я' в кодировке UTF-8:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "я"
b := s[1] // Второй байт символа 'я'
res := utf8.RuneStart(b)
fmt.Println(res)
}
Результат выполнения кода:
false
Пример
Давайте проверим байт, который является началом многобайтового
UTF-8 символа. Возьмем первый байт кириллической буквы 'я':
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "я"
b := s[0] // Первый байт символа 'я'
res := utf8.RuneStart(b)
fmt.Println(res)
}
Результат выполнения кода:
true
Пример
Важно отметить, что функция возвращает true для любого
байта, который может быть началом руны, включая байты,
не являющиеся корректными в UTF-8:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
// Байт 0xC0 - некорректный в UTF-8, но может быть началом
b := byte(0xC0)
res := utf8.RuneStart(b)
fmt.Println(res)
}
Результат выполнения кода:
true
Смотрите также
-
функцию
utf8.ValidRune,
которая проверяет, является ли руна корректной -
функцию
utf8.RuneCountInString,
которая возвращает количество рун в строке -
функцию
utf8.DecodeRuneInString,
которая декодирует первую руну из строки -
функцию
utf8.ValidString,
которая проверяет, является ли строка корректной UTF-8