go中字符在底层存储形式

字符串的底层是字节(byte)数组

在UTF-8编码中,字符可以占用1到4个字节不等,具体取决于该字符的Unicode码点。以下是不同长度的UTF-8编码格式:

  1. 1个字节:对于ASCII字符(即值从0到127),它们使用1个字节表示,首位是0,其余7位用于表示字符的码点。

    格式:0xxxxxxx

  2. 2个字节:用于表示额外的拉丁字母和其他语言的字符,包括一些带变音符号的字符等。这类字符的Unicode码点范围是从U+0080到U+07FF。

    格式:

    • 第一字节:110xxxxx
    • 第二字节:10xxxxxx
  3. 3个字节:通常用于包含中文、日文、韩文等在内的大部分常用字符,其Unicode码点范围从U+0800到U+FFFF。

    格式:

    • 第一字节:1110xxxx
    • 第二字节:10xxxxxx
    • 第三字节:10xxxxxx
  4. 4个字节:用于表示非常罕见的字符、古代文字、emoji表情符号等,这些字符的Unicode码点范围是从U+10000到U+10FFFF。

    格式:

    • 第一字节:11110xxx
    • 第二字节:10xxxxxx
    • 第三字节:10xxxxxx
    • 第四字节:10xxxxxx

每个多字节序列的第一个字节指示了整个字符的字节数,后续的每个字节都以10开头,这有助于解码器识别出当前字节是否属于一个多字节字符的一部分,并且帮助正确地解析字符串中的字符边界。

在Go语言中处理字符串时,如果你需要考虑字符而不是简单的字节,可以使用rune类型来遍历字符串,因为rune代表一个单一的Unicode码点。例如,使用for range循环遍历字符串时,它会自动解码UTF-8编码并返回每个字符的rune值及其对应的索引位置,这样你就可以准确地操作每一个字符,无论它是用多少个字节编码的。

posted @   仁义礼智信的  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示