go學習(十)go的編碼方式


1、go的編碼方式

byte 等同於int8,即1Byte長度,常用來處理ascii字符。若要表示utf-8需要用byte數組。

  • ASCII(American Standard Code for Information Interchange,美國信息交換標准代碼)

rune 等同於int32,即4Byte長度,常用來處理unicode或utf-8字符。長4B可直接存儲Unicode。

  • utf-8:英文是1Byte,中文是3Byte,emoji是4Byte。golang默認編碼正好是utf-8。
  • unicode:英文是1Byte,中文是2Byte。

2、GO代碼實現判斷字符編碼格式及編碼格式轉換(utf-8、gbk)

參考:https://studygolang.com/articles/24702?fr=sidebar

	c := '我' // rune默認存的是Unicode碼,即0x6211,這里是15位。
	fmt.Printf("Rune直接是Unicode編碼最長2Byte:%T, %d, %x, %b \n", c, c, c, c) // int32, 25105, 6211, 110001000010001
	str := "我" // byte[]存儲的是utf-8碼,按照編碼公式對Unicode二次編碼,即0xe68891,三字節是一個漢字。
	d := []byte(str)
	fmt.Printf("%T, %d, %x, %b \n", d, d, d, d) // []uint8, [230 136 145], e68891, [11100110 10001000 10010001]
	gbkData, _ := simplifiedchinese.GBK.NewEncoder().Bytes([]byte(str)) //utf-8 轉 gbk, Enoder
	fmt.Println("gbk直接打印會出現亂碼:", string(gbkData))                       //亂碼字符串
	fmt.Printf("gbk編碼:%T, %d, %x, %b \n", gbkData, gbkData, gbkData, gbkData) // []uint8, [206 210], ced2, [11001110 11010010
	utf8Data, _ := simplifiedchinese.GBK.NewDecoder().Bytes(gbkData) //gbk 轉 utf-8, Decoder
	// fmt.Println("is UTF-8:", isUtf8(utf8Data))
	fmt.Printf("utf8打印不亂碼:%T, %d ,%x ,%b \n", utf8Data, utf8Data, utf8Data, utf8Data)
漢字 GBK Unicode UTF-8
0Xced2(2B) 0x6211(2B) 0xe68891(3B)

聲明方式 go存儲類型 編碼
str := "我"
b := byte[](str)
string轉為byte[] UTF-8:0xe68891
c := '我' rune Unicode:0x6211

3、CR vs LF

  • \n是換行,英文是line feed,ASCII碼是0x0A。
    \r是回車,英文是carriage return ,ASCII碼是0x0D。
  • Unix系統里,每行結尾只有“<換行>”,即"\n"
    Windows系統里面,每行結尾是“<回車><換行>”,即“\r\n”(此處順序一定不能顛倒了!!!)
    Mac系統里,每行結尾是“<換行>”,即"\n"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM