2.5——golang数据类型【字符类型】以及fmt的输出输入、UTF-8 和 Unicode 有何区别?

fmt的输出输入

Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国

 

字符类型的基本使用

Golang中没有专门的字符类型,如果要存储单个字符,一般使用byte来保存。

字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是有单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而Go的字符串不同,它是由字节组成的。

Golang限定字符或者字符串一共三种引号,单引号(’’),双引号("") 以及反引号(``)。反引号就是标准键盘“Esc”按钮下面的那个键。 

  • 单引号,表示byte类型或rune类型,对应 uint8和int32类型,默认是 rune 类型。byte用来强调数据是raw data,而不是数字;而rune用来表示Unicode的code point。
  • 双引号,才是字符串,实际上是字符数组。可以用索引号访问某字节,也可以用len()函数来获取字符串所占的字节长度。
  • 反引号,表示字符串字面量,但不支持任何转义序列。字面量 raw literal string 的意思是,你定义时写的啥样,它就啥样,你有换行,它就换行。你写转义字符,它也就展示转义字符。
package main
import (
	"fmt"
)
//字符类型的使用
func main(){
	var c1 byte  = 'a'
	
	//当我们直接输出byte值,就是输出了字符对应的码值(ASCII码)
	fmt.Println(c1) //97
	fmt.Printf("%c, %d\n", c1, c1)//a, 97
	
	// var c2 byte= '北'  //0~255
	// fmt.Printf("c2 = %c", c2)//(overflows溢出)


	var c3 int= '北'  //使用int
	fmt.Printf("c3 = %c c3对应的码值是%d", c3,c3)//c3 = 北 c3对应的码值是21271
}

如果我们保存的字符在ASCII表中,比如【0~1,a~z,A~Z...】直接可以保存到byte

如果我们保存的字符对应码值大于255,这时我们可以考虑使用int类型保存

如果我们需要按照字符的方式输出,这时我们需要格式化输出即fmt.Printf("%c",c)

字符类型的使用细节 

(1)字符常量是用单引号('')括起来的单个字符。例如:var c1 byte = 'a'

(2)Go中允许使用转义字符“\”来将其后的字符转变为特殊字符型常量。例如:var c3 char = '\n'

(3)Go语言的字符使用utf-8编码,英文字母1个字节,汉字3个字节

(4)在Go中,字符的本质是一个整数,直接输出时,是该字符对应的utf-8编码的码值

(5)可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符

var c4 int = 22269
fmt.Printf("%c",c4) //国

(6)字符类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码 

	var a = 10 + 'a'
	fmt.Println(a) //107
	fmt.Printf("%c",a) //k

 字符类型的本质

(1)字符型存储到计算机中,需要将字符对应的码值(整数)找出来

        存储:字符 ——》对应码值 ——》  二进制 ——》 存储

        读取:二进制 ——》 码值   ——》  字符    ——》  读取

(2)字符和码值的对应关系是通过字符编码表决定的

(3)Go语言的编码都统一成了utf-8。非常方便,很统一,再也没有编码乱码的困扰了。

UTF-8 和 Unicode 有何区别?

Unicode 与 ASCII 类似,都是一种字符集。

字符集为每个字符分配一个唯一的 ID,我们使用到的所有字符在 Unicode 字符集中都有一个唯一的 ID,例如上面例子中的 a 在 Unicode 与 ASCII 中的编码都是 97。汉字“你”在 Unicode 中的编码为 20320,在不同国家的字符集中,字符所对应的 ID 也会不同。而无论任何情况下,Unicode 中的字符的 ID 都是不会变化的。

UTF-8 是编码规则,将 Unicode 中字符的 ID 以某种方式进行编码,UTF-8 的是一种变长编码规则,从 1 到 4 个字节不等。编码规则如下:

  • 0xxxxxx 表示文字符号 0~127,兼容 ASCII 字符集。
  • 从 128 到 0x10ffff 表示其他字符。 根据这个规则,拉丁文语系的字符编码一般情况下每个字符占用一个字节,而中文每个字符占用 3 个字节。

广义的 Unicode 指的是一个标准,它定义了字符集及编码规则,即 Unicode 字符集和 UTF-8、UTF-16 编码等 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值