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