golang对字符串的处理操作 如何正确理解 rune byte和string
创始人
2024-05-27 13:14:51
0

fmt.Printf相关参数介绍

  • 先来看代码的演示
package mainimport ("fmt""unicode/utf8"
)func main() {s:="我爱中国人haha!"fmt.Println(len(s))//20个字节 一个中文三个字节 15+4+1fmt.Print("\n echo byte \n")for k,v:= range []byte(s){//0 1 2 三个字节代表的是我//0----E6 ;1----88 ;2----91 ;3----E7 ;4----88 ;5----B1 ;6----E4 ;7----B8 ;8----AD ;9----E5 ;10----9B ;11----BD ;12----E4 ;13----BA ;14----BA ;15----68 ;16----61 ;17----68 ;18----61 ;19----21 ;fmt.Printf("%d----%X ;",k,v)//字节的表示 utf8编码 一个中文需要三个字节 utf8是可变长的}fmt.Print("\n echo string \n")for k,v:= range s{//string 循环的时候 返回的是int32 就是rune//0----6211 ;3----7231 ;6----4E2D ;9----56FD ;12----4EBA ;15----68 ;16----61 ;17----68 ;18----61 ;19----21 ;fmt.Printf("%d----%X ;",k,v)}fmt.Print("\n echo RuneCountInString \n")fmt.Println(utf8.RuneCountInString(s))//10位,代表多少个真实字数b:=[]byte(s)for len(b)>0{//unicodech,size:=utf8.DecodeRune(b)//每个字占多少字节//value:25105---len: 3---字符:我;value:29233---len: 3---字符:爱;value:20013---len: 3---字符:中;value:22269---len: 3---字符:国;value:20154---len: 3---字符:人;value:104---len: 1---字符:h;value:97---len: 1---字符:a;value:104---len: 1len: 1---字符:a;value:33---len: 1---字符:!;//但是我们看不到下标fmt.Printf("value:%v---len: %d---字符:%c;",ch,size,ch)b=b[size:]//bytes:=b[size:]}//	TODO Unicode和utf8的区别 runefmt.Print("\n echo rune \n")for k,v:=range []rune(s) {//int32//key:0---value: 25105---字符:我;key:1---value: 29233---字符:爱;key:2---value: 20013---字符:中;key:3---value: 22269---字符:国;key:4---value: 20154---字符:人;key:5---value: 104---字符:h;key:6---value: 97---字符:a;key:7---value: 104ue: 97---字符:a;key:9---value: 33---字符:!;fmt.Printf("key:%v---value: %v---字符:%c;",k,v,v)}}

总结

  • 我们可以说, string类型本质上就是一组字节组成的数组([]byte)。
  • range 遍历 pos,rune 其中rune是int32 pos 是所在位置(并不是第几个,比如 0,3,6)
  • 使用utf8.RuneCountInString(s) 可以获取字符数量(10)
  • 使用len获取字节长度(20)
  • 使用[]byte获取字节
  • 使用[]rune 会完成转换,并开启一个新的rune类型的切片给我们

Go 默认的字符编码就是 UTF-8 类型。

  • Go 语言的字符有以下两种:
    一种是 uint8 类型,或者叫 byte 型( byte 是 unit8 的别名),代表了 ASCII 码的一个字符,占用 1 个字节。
    一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。 rune 类型等价于 int32 类型,占用 4 个字节。rune 类型是 int32 的一个别名, rune 主要用于表示 UTF-8 编码时的字符类型。

UTF-8 和 Unicode 有何区别

  • Unicode 与 ASCII 类似,都是一种字符集。
  • Unicode 收集了这个世界上所有的符号系统,包括重音符号和其它变音符号,制表符和回车符,还有很多神秘的符号,每个符号都分配一个唯一的 Unicode 码点, Unicode 码点对应 Go 语言中的 rune 整数类型( rune 是 int32 等价类型)。
  • UTF8 是一个将 Unicode 码点编码为字节序列的变长编码。 UTF8 编码使用 1 到 4 个字节来表示每个 Unicode 码点, ASCII 部分字符只使用 1 个字节,常用字符部分使用 2 或 3 个字节表示。可以说是对Unicode的加工

相关内容

热门资讯

七年级民族团结小卫士作文30... 七年级民族团结小卫士作文300字 篇一民族团结小卫士作为一名七年级学生,我深深地感受到了民族团结的重...
diy制作作文初一(最新6篇... diy制作作文初一 篇一如何制作简易太阳能电池太阳能电池是一种利用太阳能将光能转化为电能的装置。它不...
长白山稻米事件议论文(优秀5... 长白山稻米事件议论文 篇一长白山稻米事件引发了广泛的关注和争议。这一事件涉及到了农业生产、食品安全以...
左半边翅膀初中作文800字(... 篇一:左半边翅膀初中作文800字左半边翅膀是我生活中的助力器生活中,我们每个人都有自己的左半边翅膀,...
童年趣事作文(精选6篇) 童年趣事作文 篇一小时候的我是一个活泼好动的孩子,喜欢和朋友们一起玩耍。其中有一次,我们组织了一场“...
生活在别处初一优秀作文【精简... 生活在别处初一优秀作文 篇一 生活在别处初一优秀作文 篇二生活在别处初一优秀作文 篇三未来的生活当我...
春天是一个令人遐想的季节【经... 春天是一个令人遐想的季节 篇一春天,是四季中最令人遐想的季节。寒冷的冬天过去了,大地开始苏醒,万物复...
此时无声胜有声初中作文【通用... 此时无声胜有声初中作文 篇一随着科技的不断进步和社会的快速发展,人们的生活变得越来越喧嚣。嘈杂的声音...
我们是一家人初中作文600字... 我们是一家人初中作文600字 篇一家,是一个人生活的港湾;家,是一个人成长的摇篮。而对于我来说,家更...
我的执着初一作文(精彩6篇) 我的执着初一作文 篇一执着是一种坚持不懈的品质,它使我在初一的学习生活中取得了许多成就。正是这种执着...
外祖母-初一作文【最新5篇】 外祖母-初一作文 篇一外祖母是我最亲密的长辈,她是一个非常温柔和善良的人。每次我见到她,她都会给我一...
往事如风作文【优选5篇】 往事如风作文 篇一往事如风,岁月如梭。回首过去的时光,仿佛一切都已经过去,只留下了一抹淡淡的回忆。往...
游东沙古镇初一作文1000字... 游东沙古镇初一作文1000字 篇一初一的暑假,我随着家人来到了东沙古镇,这是一个有着悠久历史和独特魅...
捡蘑菇的作文七年级共70篇 捡蘑菇的作文七年级 第一篇雨后,天空一碧如洗,空气也格外清新。小白免皮皮和妈妈跨着竹篮迫不及待地到山...
我的初一生活作文(精选6篇) 我的初一生活作文 篇一初一,是我人生中一个全新的开始。离开了小学的校园,踏入了初中的大门,我怀着激动...
黑与白的初中议论文【经典5篇... 黑与白的初中议论文 篇一黑与白,是一对互补的色彩,代表了对立却又相互依存的存在。在日常生活中,我们常...
初中随笔作文400字【最新5... 初中随笔作文400字 篇一我的偶像每个人都有自己的偶像,他们可以是明星、运动员、作家等等。而我的偶像...
初一餐桌前的谈话作文500字... 初一餐桌前的谈话作文500字 篇一初一餐桌前的谈话今天是我初一的第一天,我很兴奋地回到家中。晚饭时,...
初一作文《假期见闻》(优选6... 初一作文《假期见闻》 篇一我的假期过得非常充实和有意义。在假期中,我参加了一次有趣的亲子旅行,还参加...
八年级作文(精彩6篇) 八年级作文 篇一:我的暑假计划暑假即将来临,我对这个假期充满了期待。我计划度过一个充实而有意义的暑假...