utf8

最后更新于:2022-04-02 02:46:38

[TOC] ## 语法 包括rune和utf-8编码byte序列之间互相翻译的函数 ### Func ``` // 是否是 utf8 func Valid(p []byte) bool func ValidRune(r rune) bool func ValidString(s string) bool // 报告字节b是否可以作为某个rune编码后的第一个字节。第二个即之后的字节总是将左端两个字位设为10 func RuneStart(b byte) bool // 报告切片p是否以一个码值的完整utf-8编码开始 func FullRune(p []byte) bool func FullRuneInString(s string) bool // utf8的长度 func RuneLen(r rune) int func RuneCount(p []byte) int func RuneCountInString(s string) int // r的utf-8编码序列写入p(p必须有足够的长度),并返回写入的字节数 func EncodeRune(p []byte, r rune) int // 字节/字符串接续为utf8 func DecodeRune(p []byte) (r rune, size int) func DecodeRuneInString(s string) (r rune, size int) // 导致解析 func DecodeLastRune(p []byte) (r rune, size int) func DecodeLastRuneInString(s string) (r rune, size int) ``` ## 实例 ### EncodeRune ``` buf := make([]byte, 4) n := utf8.EncodeRune(buf, 'a') fmt.Printf("%v",buf[:n]) // [97] n = utf8.EncodeRune(buf, '世') fmt.Printf("%v",buf[:n]) // [228 184 150] ``` ### ValidString ``` utf8.ValidString("你好 world") / /true ``` ### RuneCountInString 计算带中文字符串的长度 ``` buf := []byte("Hello, 世界") fmt.Println("bytes =", len(buf)) // bytes = 13 fmt.Println("runes =", utf8.RuneCount(buf)) // runes = 9 ``` ### DecodeRuneInString 字符串所在字节数 ``` str := "Hello, 世界" for len(str) > 0 { r, size := utf8.DecodeRuneInString(str) fmt.Printf("%c %v\n", r, size) str = str[size:] } //Output: // //H 1 //e 1 //l 1 //l 1 //o 1 //, 1 //1 //世 3 //界 3 ```
';