Go | string与UTF8编码

本文探讨了Go语言中字符串的内部结构和UTF-8编码的工作原理。内容包括字符集的历史,如ASCII、GBK和Unicode,以及如何通过定长和变长编码(特别是UTF-8)来划分字符边界。此外,还详细解释了Go中字符串不可变的原因以及如何在特定情况下进行修改字符串的尝试。
摘要由CSDN通过智能技术生成

字符表示

使用字符编号对照表,即收录很多字符,然后给他们一一编号。

字符集促进了字符与二进制的合作

ASCII字符集(1967年)只收录了128个字符,扩展字符集也就只有256个
英文字符、阿拉伯数字、西文符、控制字符

GB2312(1980年)添加了简体中文、拉丁字母、日文假名

BIG5(1984年) 添加了繁体字,但是依旧有很多字符没有被收录

GB13000.1(1993年) 添加了中日韩

GBK(1995年) 不支持韩文

GB18030(2000) 更多兼容

与其不断退出更多字符的字符集,莫不如本着全球化统一标准的目的,制作一个通用字符集。这个字符集就是Unicode

Unicode(1990-1994)实现了跨区语言跨平台的文本转换与处理

如何划分字符边界

  • 直接照搬Unicode字符集进行拼凑,显然行不通,无法区分字符边界

定长编码

不管编号多大多小,统一按最长的来,位数不够高位补零。

虽然字符边界解决了,但是有些浪费内存。而且字符集收录的越多,字符跨度越大,定长编码造成的浪费就越显著

变长编码(UTF-8)

Go 语言默认的编码方式

小编号少占字节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值