Go开发05字符串彻底研究(一)rune
字符串的内容不复杂,但是多,接下来作者准备写几篇归纳一下unicode和rune
Unicode主要解决各个国家之间编码各自为政的问题,比如说,我们国家的国标编码是GBK,而日本的"国标"编码是Shift_JIS。
假如我们写一句话"小明早上好",这句字符串移到日本的计算机上肯定乱码,因为两者的编码不同。这种状况对信息交流非常不利,就像是两国语言互相不通一样。
于是Unicode就出现了,它的思路是把整个地球上的字符都收录到一张表中,每个字符位置固定,这样一下就不乱了。读者可以看出这个思路是简单有效的。
Unicode有三种实现方式,分别是UTF-32 ,UTF-16 和UTF-8 ,其中UTF-32规定一个字符占4字节,不太合理。UTF-16做了妥协,使用2字节表示一个字符。而UTF-8是由Ken thompson发明的,属于变长编码。
因此,当我们实际说Unicode时,是指UTF-16 。但是不管哪种编码实现,都不会超出4字节。
(注:关于编码的知识作者会在后面专门做一个系列解释清楚 )
有了这些背景知识,rune就理解了,它是类型别名,实际是int32,因此它主要存储Unicode码点的,也就是UTF-16 。
例如:var a = "中" fmt.Println(reflect.TypeOf(a).Name())
定义一个字符a,下面使用反射看看它的类型名是什么,结果显示int32,也就是rune类型。如果我们进一步问,这个值究竟是哪种编码呢?实际是UTF-16。rune的五种形式
我们可以用5种方式来表示一个rune字面量: 该rune字面量所对应的字符,如"a"必须是Unicode编码规范所支持的 使用"x"为前导并后跟2位16进制数,表示宽度为一个字节的值,即ASCII编码值 使用""为前导并后跟3位8进制数,表示有限宽度的值(0~255),与上一个表示法一致 使用"u"为前导并后跟4位16进制数,表示2个字节宽的值 使用"U"为前导并后跟8位16进制数,表示4个字节宽的值,即为Unicode编码规范中的UCS-4表示法。 rune的作用一:统计字符串长度var a="Go语言编程" fmt.Println(len("Go语言编程")) // 输出:14
字符串采用UTF-8编码,此处的len测的是字符串底层的字节长度,如果要统计字符串字符的长度,len不行。
我们可以使用rune将字符串强转 一下,代码如下:fmt.Println(len([]rune("Go语言编程"))) // 输出:6rune的作用二:截取字符串s := "Go语言编程" // 8=2*1+2*3 fmt.Println(s[0:8]) // 输出:Go语言
但是这种截取方式适用性不好,需要精确计算 。一旦字符串过长就很难操作。使用rune可以解决这个问题:s := "Go语言编程" // 转成 rune 数组,需要几个字符,取几个字符 fmt.Println(string([]rune(s)[:4])) // 输出:Go语言 string和rune的关系图示
小结
rune类型只是一种名称叫法,表示用来处理长度大于 1 字节( 8 位)、不超过 4 字节( 32 位)的字符类型,对于包含中文的字符串很有用处。
为什么有人血压很高也不怕?为啥有人血压很高也不怕?这个问题问得好,在现实世界里的确有些人即使是血压很高也不怕,看似生活态度很洒脱,其实是自己害了自己。那么,现实生活中持有这种态度的人到底是怎么想的呢?张大夫
长期喝电热水壶烧的开水对健康有影响吗?我是医者良言,是一名住院医师,专为普及医学知识造福人类健康,若想了解更多,请关注我,有疑问可留言,必回应!每天喝点热水壶烧的水,真的会有什么危害吗?我小时候,家里都是用一些木柴烧火
农民最多能从银行贷多少款?还不上会面临什么后果?农民能够从银行贷款的数额,可能跟工人农民,没有多大关系。农民贷款多少,就要看这个人是否是成年人,就是满十八周岁,第二,就是有购房合同。第三,就看有多少房产作为抵押。假如是购买商品房
金融圈流传富人买债券,中产买股票,穷人买期货,为什么?金融圈流传的富人买债券,中产买股票,穷人买期货,这句话说的是风险等级,债券的风险最低,期货的风险最高,股票的风险居间,并且它们的收益和风险是挂钩的。这也就说明了,富人有钱,所以他们
河图洛书的本源是什么?它真是千古之谜吗?现在是高科技时代了还说不清楚吗?中国历史上的千古奇图河图洛书之谜!内含惊天之秘!河图洛书是华夏文化的源头。易系辞上说河出图,洛出书,圣人则之。这个圣人就是人类文化始祖伏羲。传说伏羲氏时,有龙马从黄河出现,背负河图
苹果手机价格很友好,华为手机价格很坑人吗?机价三仟爱国税三仟马思纯的微笑华为价格有些坑人,当然华为有政府和企事业单位等固定客户群体,所以华为是不太重视一般普通消费者。在HTC还大火时,华为手机刚摆脱山寨机而倔起时我就发现了
国产手机中,谁能接替华为空出的高端市场,小米荣耀还是OV?我一直觉得用接替让出之类的字眼对其他厂家有失公允,好端端的市场竞争变成了别人嘴中的施舍,一下就变味了。虽然华为遭遇了不公这是事实,但这些年各家在高端市场都在进步,华为封锁就是那个X
2021年各行业裁员,2022年就业形势如何?疫情背景下,2021年各行业都不容易,很多中小企业被迫裁员,减少经营成本,甚至倒闭,2022年,如果国内外疫情持续肆虐,就业形势肯定不容乐观,可能会比今年更难,希望疫情赶快结束,因
考驾照五次不过怎么办?重新报考能选其他驾校么?如果是老司机因为某种原因驾照吊销,可以重新报驾校如果是新手第一次学驾照五次不过,那就没必要了。取得驾照以后就可以在马路上正常开车了,每个驾驶员都道路交通安全的参与者,都要必须保证驾
到铜川最不能错过的一道美食是什么?铜川市位于陕西省中部,是关中经济带的重要组成部分,通往延安的必经之路,历史文化源远流长。人生在世美食是不可缺少的,铜川除过悠久的历史文化,也有存在着各种各样的美食。下面说一些到了铜
市场上的猪头肉,是怎么做的?市场卖的猪头肉绝大多数是卤制品。批量买回猪头,剥掉猪脸,熬制松香去毛再刮洗干净,然后焯水入卤,熟了捞出来摆卖。猪头肉肥而不腻,口感丰满,吃着满口生香,尤其是下酒和夹着馒头里,那简直