go中字符在底层存储形式
字符串的底层是字节(byte)数组
在UTF-8编码中,字符可以占用1到4个字节不等,具体取决于该字符的Unicode码点。以下是不同长度的UTF-8编码格式:
-
1个字节:对于ASCII字符(即值从0到127),它们使用1个字节表示,首位是
0
,其余7位用于表示字符的码点。格式:
0xxxxxxx
-
2个字节:用于表示额外的拉丁字母和其他语言的字符,包括一些带变音符号的字符等。这类字符的Unicode码点范围是从U+0080到U+07FF。
格式:
- 第一字节:
110xxxxx
- 第二字节:
10xxxxxx
- 第一字节:
-
3个字节:通常用于包含中文、日文、韩文等在内的大部分常用字符,其Unicode码点范围从U+0800到U+FFFF。
格式:
- 第一字节:
1110xxxx
- 第二字节:
10xxxxxx
- 第三字节:
10xxxxxx
- 第一字节:
-
4个字节:用于表示非常罕见的字符、古代文字、emoji表情符号等,这些字符的Unicode码点范围是从U+10000到U+10FFFF。
格式:
- 第一字节:
11110xxx
- 第二字节:
10xxxxxx
- 第三字节:
10xxxxxx
- 第四字节:
10xxxxxx
- 第一字节:
每个多字节序列的第一个字节指示了整个字符的字节数,后续的每个字节都以10
开头,这有助于解码器识别出当前字节是否属于一个多字节字符的一部分,并且帮助正确地解析字符串中的字符边界。
在Go语言中处理字符串时,如果你需要考虑字符而不是简单的字节,可以使用rune
类型来遍历字符串,因为rune
代表一个单一的Unicode码点。例如,使用for range
循环遍历字符串时,它会自动解码UTF-8编码并返回每个字符的rune
值及其对应的索引位置,这样你就可以准确地操作每一个字符,无论它是用多少个字节编码的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界