日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

golang數(shù)據(jù)類型【字符類型】以及fmt的輸出輸入、UTF-8 和 Unicode 有何區(qū)別?

作者:有蟬 更新時(shí)間: 2022-04-22 編程語言

fmt的輸出輸入

?

字符類型的基本使用

Golang中沒有專門的字符類型,如果要存儲單個(gè)字符,一般使用byte來保存。

字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是有單個(gè)字節(jié)連接起來的。也就是說對于傳統(tǒng)的字符串是由字符組成的,而Go的字符串不同,它是由字節(jié)組成的。

Golang限定字符或者字符串一共三種引號,單引號(’’),雙引號("") 以及反引號(``)。反引號就是標(biāo)準(zhǔn)鍵盤“Esc”按鈕下面的那個(gè)鍵。?

  • 單引號,表示byte類型或rune類型,對應(yīng) uint8和int32類型,默認(rèn)是 rune 類型。byte用來強(qiáng)調(diào)數(shù)據(jù)是raw data,而不是數(shù)字;而rune用來表示Unicode的code point。
  • 雙引號,才是字符串,實(shí)際上是字符數(shù)組。可以用索引號訪問某字節(jié),也可以用len()函數(shù)來獲取字符串所占的字節(jié)長度。
  • 反引號,表示字符串字面量,但不支持任何轉(zhuǎn)義序列。字面量 raw literal string 的意思是,你定義時(shí)寫的啥樣,它就啥樣,你有換行,它就換行。你寫轉(zhuǎn)義字符,它也就展示轉(zhuǎn)義字符。
package main
import (
	"fmt"
)
//字符類型的使用
func main(){
	var c1 byte  = 'a'
	
	//當(dāng)我們直接輸出byte值,就是輸出了字符對應(yīng)的碼值(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對應(yīng)的碼值是%d", c3,c3)//c3 = 北 c3對應(yīng)的碼值是21271
}

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

如果我們保存的字符對應(yīng)碼值大于255,這時(shí)我們可以考慮使用int類型保存

如果我們需要按照字符的方式輸出,這時(shí)我們需要格式化輸出即fmt.Printf("%c",c)

字符類型的使用細(xì)節(jié)?

(1)字符常量是用單引號('')括起來的單個(gè)字符。例如:var c1 byte = 'a'

(2)Go中允許使用轉(zhuǎn)義字符“\”來將其后的字符轉(zhuǎn)變?yōu)樘厥庾址统A俊@纾簐ar c3 char = '\n'

(3)Go語言的字符使用utf-8編碼,英文字母1個(gè)字節(jié),漢字3個(gè)字節(jié)

(4)在Go中,字符的本質(zhì)是一個(gè)整數(shù),直接輸出時(shí),是該字符對應(yīng)的utf-8編碼的碼值

(5)可以直接給某個(gè)變量賦一個(gè)數(shù)字,然后按格式化輸出時(shí)%c,會輸出該數(shù)字對應(yīng)的unicode字符

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

(6)字符類型是可以進(jìn)行運(yùn)算的,相當(dāng)于一個(gè)整數(shù),因?yàn)樗紝?yīng)有Unicode碼?

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

?字符類型的本質(zhì)

(1)字符型存儲到計(jì)算機(jī)中,需要將字符對應(yīng)的碼值(整數(shù))找出來

? ? ? ? 存儲:字符 ——》對應(yīng)碼值 ——》? 二進(jìn)制 ——》 存儲

? ? ? ? 讀取:二進(jìn)制 ——》 碼值? ?——》? 字符? ? ——》? 讀取

(2)字符和碼值的對應(yīng)關(guān)系是通過字符編碼表決定的

(3)Go語言的編碼都統(tǒng)一成了utf-8。非常方便,很統(tǒng)一,再也沒有編碼亂碼的困擾了。

UTF-8 和 Unicode 有何區(qū)別?

Unicode 與 ASCII 類似,都是一種字符集。

字符集為每個(gè)字符分配一個(gè)唯一的 ID,我們使用到的所有字符在 Unicode 字符集中都有一個(gè)唯一的 ID,例如上面例子中的 a 在 Unicode 與 ASCII 中的編碼都是 97。漢字“你”在 Unicode 中的編碼為 20320,在不同國家的字符集中,字符所對應(yīng)的 ID 也會不同。而無論任何情況下,Unicode 中的字符的 ID 都是不會變化的。

UTF-8 是編碼規(guī)則,將 Unicode 中字符的 ID 以某種方式進(jìn)行編碼,UTF-8 的是一種變長編碼規(guī)則,從 1 到 4 個(gè)字節(jié)不等。編碼規(guī)則如下:

  • 0xxxxxx 表示文字符號 0~127,兼容 ASCII 字符集。
  • 從 128 到 0x10ffff 表示其他字符。 根據(jù)這個(gè)規(guī)則,拉丁文語系的字符編碼一般情況下每個(gè)字符占用一個(gè)字節(jié),而中文每個(gè)字符占用 3 個(gè)字節(jié)。

廣義的 Unicode 指的是一個(gè)標(biāo)準(zhǔn),它定義了字符集及編碼規(guī)則,即 Unicode 字符集和 UTF-8、UTF-16 編碼等?

原文鏈接:https://blog.csdn.net/qq_37899792/article/details/124094601

欄目分類
最近更新