GoLang之标准库unicode/utf8包

GoLang之标准库unicode/utf8包

1.Constants

const (
    RuneError = '\uFFFD'     // 错误的Rune或"Unicode replacement character"
    RuneSelf  = 0x80         // 低于RunSelf的字符用代表单字节的同一值表示
    MaxRune   = '\U0010FFFF' // 最大的合法unicode码值
    UTFMax    = 4            // 最大的utf-8编码的unicode字符的长度
)
func main() {
	var RuneError rune = '\uFFFD'
	var RuneSelf rune = 0x80
	var MaxRune rune = '\U0010FFFF'
	var UTFMax rune = 4
	fmt.Println(RuneError) //65533
	fmt.Println(RuneSelf)  //128
	fmt.Println(MaxRune)   //1114111
	fmt.Println(UTFMax)    //4
}

2.DecodeRune函数

函数解码p开始位置的第一个utf-8编码的码值,返回该码值和编码的字节数。
如果编码不合法,会返回(RuneError, 1)。该返回值在正确的utf-8编码情况下是不可能返回的。
如果一个utf-8编码序列格式不正确,或者编码的码值超出utf-8合法码值的范围,或者不是该码值的最短编码,该编码序列即是不合法的。函数不会执行其他的验证。

func DecodeRune(p []byte) (r rune, size int)
func main() {
	m := []byte{'a', 'b'}
	a, b := utf8.DecodeRune(m)
	fmt.Println(a) //91
	fmt.Println(b) //1
}

3.DecodeRuneInString函数

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

func DecodeRuneInString(s string) (r rune, size int)
func main() {
	s := "eggo世界"
	a, b := utf8.DecodeRuneInString(s)
	fmt.Println(s[0])     //101
	fmt.Println(a)        //101
	fmt.Println(b)        //1
	fmt.Printf("%b\n", a) //1100101
}
func main() {
	s := "世界"
	a, b := utf8.DecodeRuneInString(s)
	fmt.Println(s[0])     //228
	fmt.Println(a)        //19990
	fmt.Println(b)        //3
	fmt.Printf("%b\n", a) //100111000010110
}
func main() {
	str := "Hello, 世界"
	for len(str) > 0 {
		r, size := utf8.DecodeRuneInString(str)
		fmt.Printf("%c %v\n", r, size)
		str = str[size:]
	}
	/*
		H 1
		e 1
		l 1
		l 1
		o 1
		, 1
		  1
		世 3
		界 3
	*/
}

3.ValidRune

判断r是否可以编码为合法的utf-8序列。

func ValidRune(r rune) bool
func main() {
	var a rune = '李'
	b := utf8.ValidRune(a)
	fmt.Println(b) //true
}

4.RuneLen

返回r编码后的字节数。如果r不是一个合法的可编码为utf-8序列的值,会返回-1。

func RuneLen(r rune) int

5.RuneStart

报告字节b是否可以作为某个rune编码后的第一个字节。第二个即之后的字节总是将左端两个字位设为10。

func RuneStart(b byte) bool

7.FullRune

报告切片p是否以一个码值的完整utf-8编码开始。不合法的编码因为会被转换为宽度1的错误码值而被视为完整的。

func FullRune(p []byte) bool
func main() {
	m := []byte{'a', 'b'}
	a := utf8.FullRune(m)
	fmt.Println(a) //true
}

8.FullRuneInString

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

func FullRuneInString(s string) bool

9.RuneCount

返回p中的utf-8编码的码值的个数。错误或者不完整的编码会被视为宽度1字节的单个码值。

func RuneCount(p []byte) int

10.RuneCountInString

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

func RuneCountInString(s string) (n int)
func main() {
	a := utf8.RuneCountInString("李陆豪")
	fmt.Println(a) //3
}

11.Valid

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

func Valid(p []byte) bool

12.ValidString

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

func ValidString(s string) bool

13.EncodeRune

EncodeRune将r的utf-8编码序列写入p(p必须有足够的长度),并返回写入的字节数。

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

14.DecodeLastRune

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

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

15.DecodeLastRuneInString

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

func DecodeLastRuneInString(s string) (r rune, size int)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoGo在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值