当前位置: 首页 > news >正文

golang对字符串的处理操作 如何正确理解 rune byte和string

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的加工
http://www.lryc.cn/news/25077.html

相关文章:

  • 软件项目管理简答题复习(1)
  • 云Windows Server 2022 Datacenter 安装MySQL8解压缩版 mysql-8.0.32-winx64 230301记录
  • 如何使用BeaconEye监控CobaltStrike的Beacon
  • STM32开发(17)----CubeMX配置CRC
  • 【MySQL】基础操作:登录、访问、退出和卸载
  • 【算法经典题集】递推(持续更新~~~)
  • mysql兼容性验证
  • C++回顾(五)—— 构造函数和析构函数
  • 嵌入式学习笔记——概述
  • 化繁为简高效部署 华为云发布部署服务CodeArts Deploy
  • 注意力机制详解系列(四):混合注意力机制
  • Makefiles学习1
  • 日志框架以及如何使用LogBack记录程序
  • 集成RocketChat至现有的.Net项目中,为ChatGPT铺路
  • 王道操作系统课代表 - 考研计算机 第三章 内存管理 究极精华总结笔记
  • Cypher中的聚合
  • 图注意网络GAT理解及Pytorch代码实现【PyGAT代码详细注释】
  • 项目成本管理中的常见误区及解决方案
  • 墨天轮2022年度数据库获奖名单
  • 仓储调度|库存管理系统
  • Canvas入门-01
  • 运算符优先级
  • 微信小程序使用scss编译wxss文件的配置步骤
  • 一步一步教你如何使用 Visual Studio Code 编译一段 C# 代码
  • vue-cli中的环境变量注意点
  • 2.3数据类型
  • Kafka基本概念
  • 使用QueryBuilders、NativeSearchQuery实现复杂查询
  • taobao.open.account.update( Open Account数据更新 )
  • PT100铂电阻温度传感器