一.字符型概述
-
字符型存放单个字母或单个文字
-
Go语言不支持字符类型,在Go语言中所有字符值都转换为对应的编码表中int32值
-
Go语言默认使用UTF-8编码
- Go语言的字符有以下两种:一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型
二.编码发展历史
-
最开始使用8个可开合晶体管表示世界万物,这就是字节的由来.后来生产出可以控制字节的机器,出现了计算机
-
把字节中32以下情况称为控制码,后在控制码基础上添加空格、标点符号、数字、大小写字母等直到127,最终形成了ANSI的ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码),这时已经较好的支持英文了
-
随机计算机在全球的应用,在原ASCII基础上添加了新的字母、符号、横线竖线等直到255号,从128到255被称为扩展字符集但是此时计算机还是在只支持英文
-
等中国开始使用计算机,为了支持中文,保留了前127号,称这些为半角,把后面的内容以两个字节拼接形成中文汉字和表单符号,这后半部分就是全角,其中汉字6763个满足中文大部分情况的要求,称这个编码为GB2312
-
随着计算机在中国的普及,使用GB2312时有的汉字无法打出,又在GB2312基础上添加了近20000个汉字(包括繁体和符号等)形成GBK,后来为支持少数民族又在GBK基础上推出GB18080
-
全球中每个国家都有着自己的一套编码,ISO国际为了统一标准,重新定义一套编码,希望包含全球所有的文字和符号,俗称Unicode
-
随着互联网的快速发展,为解决Unicode网络传输中流浪浪费问题,出现了UTF编码,有UTF-8(8位传输)和UTF-16(16为传输)两种.其中UTF-8使用最多,为变长编码方式,中文占3个自己.
三.字符示例
示例
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
//定义数字i
var i rune=24352 //十六进制为0x5F20
fmt.Println(i)
//输出汉字张
fmt.Printf("%c\n",i)
//获取转换后的内容
a:=fmt.Sprintf("%c",i)
fmt.Println(a)
//'_'为一个占位符,即忽略这个变量
//将转换后的字符转换为rune类型的值
r, _ := utf8.DecodeRuneInString(a);//返回 转换后的r和状态码size,此处通过占位符将size忽略
fmt.Println(r)
// c := '张';
// fmt.Println(c) ; //24352
// fmt.Printf("%T", c) ;//int32
}
也可以使用单引号表示一个字符类型,但是本质还是正数
func main() {
c := '张'
fmt.Println(c) //24352
fmt.Printf("%T", c) //int32
}