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
```
';