golang标准库unicode学习
  Adknp2DJyaqB 2023年11月02日 34 0

golang标准库unicode学习

新建unicode.go

package unicode

import (
	"fmt"
	"unicode"
	"unicode/utf16"
	"unicode/utf8"
)

func UnicodeFunc() {
	//判断字符是否在RangeTable
	in := unicode.In('a', unicode.Latin)
	fmt.Println(in)
	in = unicode.In('a', unicode.Gothic)
	fmt.Println(in)
	//判断字符是否在RangeTable
	is := unicode.Is(unicode.Han, '我')
	fmt.Println(is)
	//判断是否是控制字符
	isControl := unicode.IsControl('&')
	fmt.Println(isControl)
	//判断是否是十进制数字
	isDigit := unicode.IsDigit('1')
	fmt.Println(isDigit)
	isDigit = unicode.IsDigit('a')
	fmt.Println(isDigit)
	//是否被unicode定义为图形
	isGraphic := unicode.IsGraphic('L')
	fmt.Println(isGraphic)
	isGraphic = unicode.IsGraphic('*')
	fmt.Println(isGraphic)
	//判断字符是否是字母
	isLetter := unicode.IsLetter('a')
	fmt.Println(isLetter)
	isLetter = unicode.IsLetter('3')
	fmt.Println(isLetter)
	//判断字符是否为小写字母
	isLower := unicode.IsLower('a')
	fmt.Println(isLower)
	isLower = unicode.IsLower('A')
	fmt.Println(isLower)
	//判断字符是否为标识字符
	isMark := unicode.IsMark('*')
	fmt.Println(isMark)
	//判断是否是数字
	isNumber := unicode.IsNumber('3')
	fmt.Println(isNumber)
	//判断字符是否在RangeTable,和in方法一样
	arr := []*unicode.RangeTable{unicode.Han, unicode.Latin}
	isOneOf := unicode.IsOneOf(arr, '打')
	fmt.Println(isOneOf)
	//判断是否为可打印字符
	isPrint := unicode.IsPrint('b')
	fmt.Println(isPrint)
	//判断是否为标点符号
	isPunct := unicode.IsPunct('4')
	fmt.Println(isPunct)
	isPunct = unicode.IsPunct(',')
	fmt.Println(isPunct)
	//判断是否是空白字符
	isSpace := unicode.IsSpace(' ')
	fmt.Println(isSpace)
	isSpace = unicode.IsSpace('\n')
	fmt.Println(isSpace)
	isSpace = unicode.IsSpace('\t')
	fmt.Println(isSpace)
	//判断字符是否是符号字符
	isSymbol := unicode.IsSymbol('$')
	fmt.Println(isSymbol)
	//判断字符是否是标题字符
	isTitle := unicode.IsTitle('q')
	fmt.Println(isTitle)
	//判断字符是否大写
	isUpper := unicode.IsUpper('a')
	fmt.Println(isUpper)
	isUpper = unicode.IsUpper('A')
	fmt.Println(isUpper)
	//
	simpleFold := unicode.SimpleFold('1')
	fmt.Println(simpleFold)
	simpleFold = unicode.SimpleFold('a')
	fmt.Println(simpleFold)
	simpleFold = unicode.SimpleFold('k')
	fmt.Println(simpleFold)
	//
	const lcG = 'g'
	fmt.Printf("%#U\n", unicode.To(unicode.UpperCase, lcG))
	fmt.Printf("%#U\n", unicode.To(unicode.LowerCase, lcG))
	fmt.Printf("%#U\n", unicode.To(unicode.TitleCase, lcG))

	const ucG = 'G'
	fmt.Printf("%#U\n", unicode.To(unicode.UpperCase, ucG))
	fmt.Printf("%#U\n", unicode.To(unicode.LowerCase, ucG))
	fmt.Printf("%#U\n", unicode.To(unicode.TitleCase, ucG))
	//转小写
	fmt.Printf("%#U\n", unicode.ToLower(ucG))
	//转大写
	fmt.Printf("%#U\n", unicode.ToUpper(ucG))
	//
	fmt.Printf("%#U\n", unicode.ToTitle(ucG))
}

func Utf8Func() {
	//追加字符
	buf1 := utf8.AppendRune(nil, 'a')
	buf2 := utf8.AppendRune([]byte("23480972hsdf"), 'a')
	fmt.Println(string(buf1))
	fmt.Println(string(buf2))
	//获取最后的字符从字节数组
	lastRune, si := utf8.DecodeLastRune([]byte("是打开了飞机速度离开"))
	fmt.Println(lastRune)
	fmt.Println(si)
	fmt.Println(string(lastRune))
	//获取最后的字符从字符串
	lastRuneString, si := utf8.DecodeLastRuneInString("看来是杜甫速度")
	fmt.Println(lastRuneString)
	fmt.Println(si)
	fmt.Println(string(lastRuneString))
	//从字符获取字节数组
	r := '世'
	buf := make([]byte, 3)
	n := utf8.EncodeRune(buf, r)
	fmt.Println(buf)
	fmt.Println(n)
	//检查字节数组是否完整
	c := []byte{228, 184, 150} // 世
	fmt.Println(utf8.FullRune(c))
	fmt.Println(utf8.FullRune(c[:2]))
	//检查字符串是否完整
	str := "世"
	fmt.Println(utf8.FullRuneInString(str))
	fmt.Println(utf8.FullRuneInString(str[:2]))
	//统计rune个数
	runeCount := []byte("破而ui而与技能等级")
	fmt.Println("bytes =", len(runeCount))
	fmt.Println("runes =", utf8.RuneCount(runeCount))
	//统计rune个数
	str1 := "噢的u而额外iu哦嗯嗯u"
	fmt.Println("bytes =", len(str1))
	fmt.Println("runes =", utf8.RuneCountInString(str1))
	//统计字符字节数
	fmt.Println(utf8.RuneLen('a'))
	fmt.Println(utf8.RuneLen('界'))
	//
	buf = []byte("沃尔沃wer89")
	fmt.Println(utf8.RuneStart(buf[0]))
	fmt.Println(utf8.RuneStart(buf[1]))
	fmt.Println(utf8.RuneStart(buf[2]))
	//验证是否有效的utf8编码
	valid := []byte("Hello, 世界")
	invalid := []byte{0xff, 0xfe, 0xfd}
	fmt.Println(utf8.Valid(valid))
	fmt.Println(utf8.Valid(invalid))
	//是否可以编码为utf8
	valid1 := 'a'
	invalid1 := rune(0xfffffff)
	fmt.Println(utf8.ValidRune(valid1))
	fmt.Println(utf8.ValidRune(invalid1))
	//验证字符串是否是有效的utf8
	valid2 := "234fsfsdfsd"
	invalid2 := string([]byte{0xff, 0xfe, 0xfd})
	fmt.Println(utf8.ValidString(valid2))
	fmt.Println(utf8.ValidString(invalid2))
}

func Utf16Func() {
	app := utf16.AppendRune(nil, 'r')
	fmt.Println(app)
	app = utf16.AppendRune(app, '3')
	fmt.Println(app)

	as := utf16.Decode(app)
	for _, v := range as {
		fmt.Println(string(v))
	}

	en, ew := utf16.EncodeRune('w')
	fmt.Printf("%x,%x", en, ew)

	en1 := utf16.DecodeRune(0xD840, 0xDC3E)
	fmt.Printf("%c\n", en1)

	is := utf16.IsSurrogate('s')
	fmt.Println(is)
}

然后新建unicode_test.go

package unicode

import "testing"

func TestUnicodeFunc(t *testing.T) {
	UnicodeFunc()
}

func TestUtf8Func(t *testing.T) {
	Utf8Func()
}

func TestUtf16Func(t *testing.T) {
	Utf16Func()
}

然后执行

go test -v
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jE8iBWyhLcsg   2023年11月02日   46   0   0 javasubstringgolang
  Adknp2DJyaqB   2023年11月02日   56   0   0 unsafegolang
  Adknp2DJyaqB   2023年11月02日   34   0   0 unicodegolang
  Ohl6n170bzPf   2023年11月02日   26   0   0 golang
  Adknp2DJyaqB   2023年11月13日   20   0   0 restfulgrpcgolang
  Adknp2DJyaqB   2023年11月13日   30   0   0 发布订阅grpcgolang
  Adknp2DJyaqB   2023年11月02日   31   0   0 golang
  Adknp2DJyaqB   2023年11月02日   33   0   0 golangmilvus
  Adknp2DJyaqB   2023年11月13日   23   0   0 grpcgolang
Adknp2DJyaqB