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说明
\aU+0007告警铃声或蜂鸣声
\bU+0008退格符
\fU+000C换页符
\nU+000A换行符
\rU+000D回车符
\tU+0009水平制表符
\vU+000b垂直制表符
\U+005c反斜杠
U+0027单引号,仅在rune字面量中有效
"U+0033双引号,仅在string字面量中有效

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值