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

學無先后,達者為師

網站首頁 編程語言 正文

golang數據類型【字符類型】以及fmt的輸出輸入、UTF-8 和 Unicode 有何區別?

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

fmt的輸出輸入

?

字符類型的基本使用

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 編碼等?

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

欄目分類
最近更新