Go语言的rune类型

定义

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32

rune是int32的别名类型,用于存储Unicode编码的单个字符,字符串需要用[]rune表示。

rune字面量

常规可显示字符

字符必须是Unicode编码规范所支持的。

	var a rune = 'a'
	fmt.Printf("%+v\n", a) // 97

\x前缀

使用\x为前缀,后跟2位16进制数,表示宽度为1字节的ASCII编码值

	var b rune = '\x61'
	fmt.Printf("%+v\n", b) // 97

\前缀

使用\为前缀,后跟3位8进制数,表示宽度为1字节,范围是0-255

	var c rune = '\141'
	fmt.Printf("%+v\n", c) // 97

\u前缀

使用\u为前缀,后跟4位16进制数据,表示2字节宽度的值

	var d rune = '\u1234'
	fmt.Printf("%+v\n", d) // 4460,即0x1234的10进制数

\U前缀

使用\U为前缀,后跟8位16进制数,可以表示4字节宽度的值,这种方式在Unicode编码规范中也被称为UCS-4表示法

	var e rune = '\U00012345'
	fmt.Printf("%+v\n", e) // 74565,即0x00012345的16进制数

Unicode编码范围

Unicode规范定义了Unicode的编码范围,超过这个范围rune是无法表示的,会提示:escape sequence is invalid Unicode code point U+FFFFFFFF

	var f rune = '\Uffffffff' // escape sequence is invalid Unicode code point U+FFFFFFFF

[]rune与string的转换

如果rune切片内的所有字符都是可显示的,则转换得到的string可以正常显示,否则会显示乱码

	var s []rune = []rune{a,b,c,d,e}
	fmt.Printf("%+v\n", s) // [97 97 97 4660 74565]
	fmt.Println(string(s)) // aaaሴ

字符串可以正常转换为rune切片:

	name := "pirlo"
	fmt.Printf("%+v\n", []rune(name)) // [112 105 114 108 111]
	fmt.Printf("%+v\n", string([]rune(name))) // pirlo

转义字符

转义符 Unicode Code Point 说明
\a U+0007 告警铃声或蜂鸣声
\b U+0008 退格符
\f U+000C 换页符
\n U+000A 换行符
\r U+000D 回车符
\t U+0009 水平制表符
\v U+000b 垂直制表符
\ U+005c 反斜杠
U+0027 单引号,仅在rune字面量中有效
" U+0033 双引号,仅在string字面量中有效

除了上述转义符外,rune字面量中以“\”为前缀的字符序列都是不合法的。

你可能感兴趣的:(let-us-go,unicode,go,rune)