标签:字符 UTF Unicode rune str Go byte
package main
func main() {
/*
rune是int32的别名类型,一个值就代表一个Unicode字符。
byte是uint8的别名类型,一个值就代表一个ASCII码的一个字符。
rune类型的值在底层都是由一个 UTF-8 编码值来表达的。
了解下什么是Unicode字符和ASCII码:
1、简单理解,我们平时接触到的中英日文,或者复合字符,都是Unicode字符。
比如,'G'、'o'、'爱'、'好'、'者'就是一个个Unicode字符。
2、字符在计算机中存储时需要使用二进制数来表示。所以人们定义了一张表,
将我们用到的字符用一个二进制数值表示。这就是ASCII码表的由来。
UTF-8 编码方案会把一个 Unicode 字符编码为一个长度在 1\~4 以内的字节序列。
所以,一个rune类型值代表了1\~4个长度的byte数组。
案例:
func main() {
str := "Go爱好者"
fmt.Printf("The string: %q\n", str)
fmt.Printf(" => runes(char): %q\n", []rune(str))
fmt.Printf(" => runes(hex): %x\n", []rune(str))
fmt.Printf(" => bytes(hex): [% x]\n", []byte(str))
}
The string: "Go爱好者"
=> runes(char): ['G' 'o' '爱' '好' '者']
=> runes(hex): [47 6f 7231 597d 8005]
=> bytes(hex): [47 6f e7 88 b1 e5 a5 bd e8 80 85]
字符串值"Go爱好者"如果被转换为[]rune类型的值的话,其中的每一个字符(不论是英文还是中文)
就都会独立成为一个rune类型的元素值。如打印出的第二行内容。
又由于,每个rune类型的值在底层都是由一个 UTF-8 编码值来表达的,如第三行
把每个字符的 UTF-8 编码值都拆成相应的字节序列,如第四行,因为一个中文字符的 UTF-8 编码值需要用三个字节来表达。
总结:
一个string类型的值既可以被拆分为一个包含多个字符的序列,也可以被拆分为一个包含多个字节的序列。
前者可以由一个以rune为元素类型的切片来表示,而后者则可以由一个以byte为元素类型的切片代表。
*/
}
标签:字符,UTF,Unicode,rune,str,Go,byte 来源: https://www.cnblogs.com/yzgblogs/p/15552686.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。