婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go語言中的UTF-8實現(xiàn)

Go語言中的UTF-8實現(xiàn)

熱門標簽:外呼系統(tǒng)顯本地手機號 壽光微信地圖標注 百度地圖標注后傳給手機 阿克蘇地圖標注 評價高的400電話辦理 外呼系統(tǒng)用什么卡 excel地圖標注分布數(shù)據(jù) 涿州代理外呼系統(tǒng) 電話機器人軟件免費

計算機剛誕生的時候,計算機內的字符可以全部由 ASCII 來表示,ASCII 字符的長度是 7 位,可以表示 128 個字符,對于美國等國家來說是夠了,但是對于世界上的其他國家,特別是東亞國家,文字不是由字母組成,漢字就有幾萬個,ASCII 碼根本不夠用。

字符本質就是對應計算機中的一個數(shù)值,既然不夠用,那么解決方法就是把這個范圍擴大,Unicode 的出現(xiàn)就解決了這個問題,它包括了世界上所有的字符,每一個字符都對應一個數(shù)值,這個數(shù)值被稱之為 Unicode 碼點。

但是 Unicode 也不是沒有缺點,因為表示的范圍大,所以每一個 Unicode 都需要 4 個字節(jié)來表示,但是對于原本的 ASCII 編碼,本來只需要一個字節(jié),現(xiàn)在也需要 4個字節(jié),這樣會浪費很多存儲。

UTF-8 的出現(xiàn)解決了這個問題,它解決問題的思路是讓每個字符選擇自己的大小,需要多少字節(jié)就用多少。對于占不同字節(jié)的字符,有不同的表示格式:

  • 1 字節(jié):0xxxxxxx
  • 2 字節(jié):110xxxxx 10xxxxxx
  • 3 字節(jié):1110xxxx 10xxxxxx 10xxxxxx
  • 4 字節(jié):11110xxx 10 xxxxxx 10xxxxxx 10xxxxxx

通過識別每個字符串的頭部來判斷占幾個字節(jié)。

每個 Unicode 字符都對應一個碼點,在字符串中,可以對碼點進行轉義,使用 \uhhhh 表示 16 位碼點,使用 \Uhhhhhhhh 來表示 32 位碼點,每一個 h 都代表一個十六進制的數(shù)字。

這里有一點比較特殊,對于碼點值小于 256 的文字符號可以使用單個十六進制的數(shù)字來表示,比如 'A' 可以使用 '\x41' 來表示,對于大于 256 的碼點,就必須使用 \u 或者 \U 來轉義。

Go 語言對于 UTF-8 的支持很好,這里有一點很有意思,Go 語言的兩位作者 Ken Thompson 和 Rob Pike 同時也是 UTF-8 的發(fā)明者,Go 語言對 UTF-8 的支持贏在起跑線。

Go 語言總是使用 UTF-8 來處理源文件,同時也是優(yōu)先使用 UTF-8 來處理字符串。所以上面說到的那些 Unicode 字符的轉義被 Go 直接處理,比如下面三個字符串在 Go 語言中是等價的:

"世界"
"\u4e16\u754c"
"\U00004e16\U0000u754c"

Go 字符串使用只讀的 []byte 來存儲,所以字符串值是不變的,這樣做更安全,效率也很高:

s := "left root"
t := s
s += ", right root"

fmt.Println(s) // left root, right root
fmt.Println(t) // left root

在上面的例子中, s 的值出現(xiàn)了變化,但是 t 的值還是舊的字符串。由于是 [] byte 是 slice 類型,所以字符串的截取操作效率很高,但是在字符串截取的過程中,就會出現(xiàn)一些坑。
Go 中的字符串底層使用了只讀的 []byte 來存儲,所以**本質上 Go 語言中的字符串是使用字節(jié)來表示,而不是字符表示,**理解這一點很重要。

str := "hello world"
fmt.Println(str[:2]) // he

str = "你好,世界"
fmt.Println(str[:2]) // ��,這個符號用來表示 UTF-8 里面的未知字符,碼點是

非 ASCII 碼的字符一般占用的字節(jié)會超過一個,如果直接截取,就會導致截取不到正確的位置,從而亂碼。在上面的例子中,一個中文字符占 3 個字節(jié),只有嚴格按照字節(jié)數(shù)來截取才能獲取到顯示正常的字符:

str = "你好,世界"
fmt.Println(str[:3]) // 你

那么在這個時候,如果要按照字符截取,就需要把字符串轉成 []rune,每個 rune 都代表一個 UTF-8 中的碼點,對 []rune 按照字符截取就不會出現(xiàn)亂碼:

str = "你好,世界"
runeStr := []rune(str)
fmt.Println(string(runeStr[:1])) // 你

把字符串轉成 []rune,就是把字符串轉成 UTF-8 碼點,而不是 []byte,rune 其實就是 int32 類型。

Go 語言中有一個專門 unicode/utf8 包來處理 utf8 字符。由于每個字符占據(jù)的字節(jié)可能不一樣,所以字符數(shù)和字節(jié)數(shù)大小是兩回事:

s := "Hello, 世界" // 逗號是半角符號
fmt.Println(len(s))                    // 13
fmt.Println(utf8.RuneCountInString(s)) // 9

如果要獲取字符占據(jù)的總字節(jié)數(shù),就使用 len 方法,如果需要計算字符的個數(shù),那就需要使用 utf8.RuneCountInString 方法。
這個包里面還提供了其他常用函數(shù):

// 判斷是否符合 utf8 編碼:
func Valid(p []byte) bool
func ValidRune(r rune) bool
func ValidString(s string) bool
// 判斷 rune 所占的字節(jié)數(shù)
func RuneLen(r rune) int
// 判斷字節(jié)串或者字符串中的 rune 字符數(shù)
func RuneCount(p []byte) int
func RuneCountInString(s string) int
// 對 rune 的編碼和解碼
func EncodeRune(p []byte, r rune) int
func DecodeRune(p []byte) (r rune, size int)
func DecodeRuneInString(s string) (r rune, size int)
func DecodeLastRune(p []byte) (r rune, size int)
func DecodeLastRuneInString(s string) (r rune, size int)

除了 utf8 包之外, unicode 包對提供了一系列 IsXX 函數(shù)來 rune 的檢查:

func Is(rangeTab *RangeTable, r rune) bool // 是否是 RangeTable 類型的
func In(r rune, ranges ...*RangeTable) bool  // 是否是 ranges 中任意一個類型的字符
func IsControl(r rune) bool  // 是否是控制字符
func IsDigit(r rune) bool  // 是否是阿拉伯數(shù)字字符,即 0-9
func IsGraphic(r rune) bool // 是否是圖形字符
func IsLetter(r rune) bool // 是否是字母
func IsLower(r rune) bool // 是否是小寫字符
func IsMark(r rune) bool // 是否是符號字符
func IsNumber(r rune) bool // 是否是數(shù)字字符,包含羅馬數(shù)字
func IsOneOf(ranges []*RangeTable, r rune) bool // 是否是 RangeTable 中的一個
func IsPrint(r rune) bool // 是否是可打印字符
func IsPunct(r rune) bool // 是否是標點符號
func IsSpace(r rune) bool // 是否是空格
func IsSymbol(r rune) bool // 是否符號字符
func IsTitle(r rune) bool // 字符串中的每個單詞的第一個字符是否是大寫
func IsUpper(r rune) bool // 是否是大寫字符

RangeTable 是對所有 Unicode 字符的分類,比如驗證一個字符是否是漢字:

r := '中'
result := unicode.Is(unicode.Han, r)
fmt.Println(result) // true

其中 unicode.Han 就是 RangeTable 類型,表示漢字。

到此這篇關于Go語言中的UTF-8實現(xiàn)的文章就介紹到這了,更多相關Go語言UTF-8內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 利用go-kit組件進行服務注冊與發(fā)現(xiàn)和健康檢查的操作
  • Goland 斷點調試Debug的操作
  • golang中的空slice案例
  • Go語言切片前或中間插入項與內置copy()函數(shù)詳解
  • golang中切片copy復制和等號復制的區(qū)別介紹
  • go語言中切片與內存復制 memcpy 的實現(xiàn)操作
  • go-kit組件使用hystrix中間件的操作

標簽:重慶 吐魯番 蘭州 梅河口 欽州 汕頭 雞西 銅川

巨人網(wǎng)絡通訊聲明:本文標題《Go語言中的UTF-8實現(xiàn)》,本文關鍵詞  語言,中的,UTF-8,實現(xiàn),語言,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言中的UTF-8實現(xiàn)》相關的同類信息!
  • 本頁收集關于Go語言中的UTF-8實現(xiàn)的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91精品国产欧美一区二区| 一区二区三区欧美亚洲| 国产成人在线视频网站| 国产亚洲福利社区一区| 99精品欧美一区二区蜜桃免费 | 欧美日韩一区视频| 丝袜美腿成人在线| 国产无人区一区二区三区| 99riav一区二区三区| 日韩激情一区二区| 国产拍欧美日韩视频二区| 在线免费精品视频| 久久97超碰国产精品超碰| 亚洲视频一区二区免费在线观看| 精品一区二区日韩| 欧美激情一区二区三区不卡| 91麻豆精品在线观看| 天堂一区二区在线免费观看| 国产日产欧美一区| 在线一区二区视频| 久久成人免费日本黄色| 亚洲品质自拍视频| 欧美成人vps| 色域天天综合网| 久久狠狠亚洲综合| 亚洲欧美色图小说| 精品奇米国产一区二区三区| 91老师片黄在线观看| 爽爽淫人综合网网站| 国产欧美日韩在线观看| 欧美日韩久久不卡| 丁香五精品蜜臀久久久久99网站| 中文字幕av在线一区二区三区| 国产高清在线精品| 亚洲香蕉伊在人在线观| 久久久天堂av| 欧美裸体bbwbbwbbw| 盗摄精品av一区二区三区| 亚洲国产精品久久不卡毛片| 国产夜色精品一区二区av| 欧美吻胸吃奶大尺度电影 | 亚洲一卡二卡三卡四卡| 久久综合九色综合97_久久久| 91麻豆免费观看| 在线观看视频一区二区| 日韩一区二区免费高清| 久久先锋影音av鲁色资源网| 亚洲风情在线资源站| 亚洲国产日产av| 欧美精品一区二区三区视频| 在线观看日韩国产| 成人性色生活片| 美女尤物国产一区| 亚洲一区二区av在线| 中文字幕精品一区二区精品绿巨人| 成人午夜在线播放| 三级久久三级久久| 亚洲理论在线观看| 国产欧美综合在线观看第十页| 99精品欧美一区二区三区综合在线| 一区二区三区波多野结衣在线观看| 日本道精品一区二区三区| 国产激情一区二区三区四区| 亚洲mv在线观看| 亚洲视频小说图片| 国产日韩欧美精品一区| 日韩欧美国产电影| 精品视频1区2区| 91麻豆国产福利精品| 久久99精品久久久久久国产越南 | 国产精品少妇自拍| 日韩精品一区二区三区swag| 在线不卡免费av| 日本高清不卡视频| 97se狠狠狠综合亚洲狠狠| 国产精品1024| 麻豆极品一区二区三区| 日韩精品1区2区3区| 亚洲一级电影视频| 亚洲精品你懂的| 亚洲欧美综合另类在线卡通| 国产无遮挡一区二区三区毛片日本| 一本大道av一区二区在线播放| 日韩国产欧美在线播放| 一区二区三区在线免费视频| 国产精品私人影院| 国产亚洲精品免费| 久久综合中文字幕| 精品入口麻豆88视频| 日韩欧美一二三| 日韩一区二区在线播放| 337p亚洲精品色噜噜噜| 欧美精品欧美精品系列| 欧美日韩一区二区三区四区五区| 国产一区亚洲一区| 久久国产精品一区二区| 蜜臀久久99精品久久久画质超高清| 国产精品久久久久久久久快鸭 | 亚洲色图第一区| 国产精品对白交换视频| 中文字幕免费一区| 欧美国产在线观看| 国产精品乱码人人做人人爱| 中文字幕欧美激情| 亚洲欧洲精品一区二区精品久久久| 日韩一区二区电影网| 欧美一区二区三区系列电影| 欧美日韩电影在线播放| 欧美电影一区二区三区| 欧美精品久久一区二区三区| 欧美一区二区三区啪啪| 日韩欧美中文字幕一区| 精品国产乱码久久久久久牛牛 | 欧美日韩久久久一区| 欧美日韩一区久久| 日韩欧美中文字幕一区| 久久婷婷国产综合国色天香| 久久久久国产精品麻豆| 国产夜色精品一区二区av| 国产精品久久综合| 亚洲女子a中天字幕| 亚洲一区二区三区自拍| 日欧美一区二区| 另类小说色综合网站| 国产精品自拍三区| caoporen国产精品视频| 色婷婷综合久色| 欧美日韩1234| 欧美精品一区二区三区视频 | 9191成人精品久久| 日韩一卡二卡三卡四卡| 欧美少妇bbb| 9191成人精品久久| 精品国产1区二区| 国产女人水真多18毛片18精品视频| 欧美成人一区二区| 国产日韩欧美精品电影三级在线| 2017欧美狠狠色| 欧美高清在线精品一区| 亚洲欧美日韩系列| 香蕉加勒比综合久久| 久久国产精品99久久人人澡| 高清成人免费视频| 久久99精品国产91久久来源| 精品久久久久久久久久久久久久久| 欧美经典一区二区| 91高清在线观看| 国产精品资源站在线| 亚洲国产精品综合小说图片区| 色哟哟一区二区在线观看| 国产精品羞羞答答xxdd| 日韩一区二区电影网| 国产日韩三级在线| 亚洲女子a中天字幕| 日韩av在线播放中文字幕| 高清国产一区二区| 欧美日韩中文字幕一区| 精品国产伦理网| 亚洲免费视频成人| 奇米影视一区二区三区小说| 岛国精品一区二区| 欧美在线啊v一区| 精品理论电影在线| 亚洲乱码中文字幕综合| 免费观看一级欧美片| 成人免费视频播放| 91精品国产色综合久久| 菠萝蜜视频在线观看一区| 日本高清不卡aⅴ免费网站| 精品国产不卡一区二区三区| 亚洲欧洲综合另类| 蜜桃视频在线一区| 99综合影院在线| 欧美一级黄色大片| 亚洲欧美乱综合| 久久99国产精品尤物| 91理论电影在线观看| 亚洲精品在线一区二区| 一区二区在线观看视频| 国产一区在线观看视频| 欧美精品乱码久久久久久按摩| 91精品婷婷国产综合久久竹菊| 91精品国产综合久久香蕉的特点| 欧美日韩精品福利| 久久久久9999亚洲精品| 亚洲成人av一区二区三区| 国产精品18久久久久| 在线播放日韩导航| 亚洲欧美在线视频| 国产一区二区精品久久| 欧美欧美欧美欧美首页| |精品福利一区二区三区| 麻豆国产精品官网| 色视频一区二区| 中文字幕av一区二区三区高| 免费观看成人鲁鲁鲁鲁鲁视频| 国产成人免费在线| 9191久久久久久久久久久| 亚洲免费在线观看视频| 成人小视频免费在线观看|