一.字符型概述

  • 字符型存放单个字母或单个文字
  • Go语言不支持字符类型,在Go语言中所有字符值都转换为对应的编码表中int32值
  • Go语言默认使用UTF-8编码

二.编码发展历史

  • 最开始使用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个自己.

三.字符示例

  • 示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    func main() {
    //定义数字
    var i rune=`1 //0x5F20
    fmt.Println(i)

    //输出汉字张
    fmt.Printf("%c\n",i)

    //获取转换后的内容
    c:=fmt.Sprintf("%c",i)
    fmt.Println(c)
    }
  • 也可以使用单引号表示一个字符类型,但是本质还是正数
    1
    2
    3
    4
    5
    func main() {
    c := '张'
    fmt.Println(c) //24352
    fmt.Printf("%T", c) //int32
    }