unc EncodeRune(p []byte, r rune) int

    • 将 r 转换为 UTF-8 编码写入 p 中(p 必须足够长,通常为 4 个字节)
    • 如果 r 是无效的 Unicode 字符,则写入 RuneError
    • 返回写入的字节数

      1. r := '蒋'
      2. buf := make([]byte, 3)
      3. n := utf8.EncodeRune(buf, r)
      4. fmt.Println(buf)
      5. fmt.Println(n)

      func DecodeRune(p []byte) (r rune, size int)

    • 解码 p 中的第一个字符,返回解码后的字符和 p 中被解码的字节数

    • 如果 p 为空,则返回(RuneError, 0)
    • 如果 p 中的编码无效,则返回(RuneError, 1)

    func DecodeRuneInString(s string) (r rune, size int)

    • 函数类似DecodeRune但输入参数是字符串。

    func DecodeLastRune(p []byte) (r rune, size int)

    • 函数解码p中最后一个utf-8编码序列,返回该码值和编码序列的长度。

    func DecodeLastRuneInString(s string) (r rune, size int)

    • 函数类似DecodeLastRune但输入参数是字符串。

    func FullRune(p []byte) bool

    • FullRune 检测 p 中第一个字符的 UTF-8 编码是否完整(完整并不表示有效)。

      1. buf := []byte{228, 184, 150} // 世
      2. fmt.Println(utf8.FullRune(buf)) //true
      3. fmt.Println(utf8.FullRune(buf[:2])) //false

      func FullRuneInString(s string) bool

    • 函数类似FullRune但输入参数是字符串。

    func RuneCount(p []byte) int

    • 返回p中的utf-8编码的码值的个数

      1. buf := []byte("Hello,世界")
      2. fmt.Println("bytes =", len(buf))//12
      3. fmt.Println("runes =", utf8.RuneCount(buf))//8

      func RuneCountInString(s string) (n int)

    • 函数类似RuneCount但输入参数是一个字符串

    func Valid(p []byte) bool

    • 返回切片p是否包含完整且合法的utf-8编码序列。

      1. valid := []byte("Hello, 世界")
      2. invalid := []byte{0xff, 0xfe, 0xfd}
      3. fmt.Println(utf8.Valid(valid))//true
      4. fmt.Println(utf8.Valid(invalid))//false

      func ValidString(s string) bool

    • 报告s是否包含完整且合法的utf-8编码序列。

      1. valid := "Hello, 世界"
      2. invalid := string([]byte{0xff, 0xfe, 0xfd})
      3. fmt.Println(utf8.ValidString(valid))
      4. fmt.Println(utf8.ValidString(invalid))