TODO:字节的那点事Go篇数组
(本文go version go1.7.3 darwin/amd64)编码
在Golang中string底层是由byte数组组成的。code
fmt.Println(len(“dsd好”))orm
输出的长度是6内存
fmt.Println(len(string(rune(‘好’))))unicode
输出的长度是3字符串
fmt.Println(len([]rune(“好的2s”)))string
输出的长度是4it
因此用string存储unicode的话,若是有中文(中文是由3个字节组成io
),按下标是访问不到的,由于你只能获得一个byte。 要想访问中文的话,仍是要用rune切片,这样就能按下标访问。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年建立。如今已经标准化为RFC 3629。UTF-8用1到4个字节编码Unicode字符。用在网页上能够统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
为何要作UTF-8转码?很大语言直接支持UTF-8,部分语言存储字符串到内存时直接使用 UTF-8编码。UTF-8是一个通用解决方案,一直有人维护。例如Golang语言就直接支持UTF-8。
接下来咱们来看看Golang是怎么处理UTF-8转码,如图
输出:
为何fmt.Println(StrToByte(“國”))输出[11]呢?由先了解到byte到范围是0~256,22283对256取余为11。
在Golang中就是这样使用UTF-8,你是否注意到其中到使用细节呢。
wxgzh:ludong86