欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Go語言中多字節(jié)字符的處理-創(chuàng)新互聯(lián)

1 概述

Go語言的字符串是使用UTF-8編碼的。UTF-8Unicode的實現(xiàn)方式之一。本文內(nèi)容包括:UTF-8Unicode的關(guān)系,Go語言提供的unicode包和unicode/utf8包的使用。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),東麗企業(yè)網(wǎng)站建設(shè),東麗品牌網(wǎng)站建設(shè),網(wǎng)站定制,東麗網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,東麗網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

2UTF-8Unicode的關(guān)系

Unicode一種字符集,是國際標(biāo)誰化組織(ISO)設(shè)計的一個包括了地球上所有文化、所有字母和符號 的編碼。他們叫它Universal Multiple-Octet Coded Character Set,簡稱 UCS,也就是Unicode。Unicode為每一個 字符 分配一個唯一的 碼點(Code Point),就是一個唯一的值。例如 康 的碼點就是 24247,十六進(jìn)制為5eb7。
Unicode字符集僅僅定義了字符與碼點的對應(yīng)關(guān)系,但是并沒有定義該如何編碼(存儲)這個碼值,這就導(dǎo)致了很多問題。例如由于字符的碼值不同,導(dǎo)致所需要的存儲空間是不一致的,計算機(jī)不能確定接下來的字符是占用幾個字節(jié)。還有就是如果采用固定的長度假設(shè)都是4個字節(jié)來存儲碼點值,那么會導(dǎo)致空間的額外浪費(fèi),因為ascii碼字符其實僅僅需要一個字節(jié)的空間。

UTF-8就是解決如何為Unicode編碼而設(shè)計的一種編碼規(guī)則??梢哉fUTF-8Unicode的實現(xiàn)方式之一。其特點是一種變長編碼,使用1到4個字節(jié)表示一個字符,根據(jù)不同的符號而變化長度。UTF-8的編碼規(guī)則有二:

  • 對于單字節(jié)的符號,字節(jié)的第一位設(shè)為0,后面7位為這個符號的Unicode碼。因此對于ASCII碼字符,UTF-8編碼和ASCII碼是相同的。
  • 對于 n 字節(jié)的符號(n > 1,2到4),第一個字節(jié)的前n位都設(shè)為1,第n + 1 位設(shè)為 0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進(jìn)制位,全部為這個符號的Unicode碼。

以下是編碼規(guī)則:

Unicode             | UTF-8
--------------------------------------------------------- 
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
---------------------------------------------------------

Go語言中,對于 Unicode 和 UTF-8 使用了unicodeunicode/utf8包來實現(xiàn),下面是閱讀 API 的總結(jié)和說明。

3Unicode

Go語言中,提供了Unicode包,處理與Unicode相關(guān)的操作,整理如下:

Is(rangeTab *RangeTable, r rune) bool

檢測 rune r 是否在rangeTable指定的字符范圍內(nèi)。
rangeTable一個Unicode碼值集合,通常使用unicode包中定義的集合。

判斷字符是否出現(xiàn)在漢字集合中:
unicode.Is(unicode.Scripts["Han"], 'k')
// 返回 false
unicode.Is(unicode.Scripts["Han"], '康')
// 返回 true

In(r rune, ranges ...*RangeTable) bool

檢測 rune r 是否在多個rangeTable指定的字符范圍內(nèi)。
rangeTable一個Unicode碼值集合,通常使用unicode包中定義的集合。

unicode.In('康', unicode.Scripts["Han"], unicode.Scripts["Latin"])
// 返回 true
unicode.In('k', unicode.Scripts["Han"], unicode.Scripts["Latin"])
// 返回 true

IsOneOf(ranges []*RangeTable, r rune) bool

檢測 rune r 是否在rangeTableranges 指定的字符范圍內(nèi)。與In功能類似,推薦使用In

IsSpace(r rune) bool

檢測字符 rune r 是否是空白字符。在Latin-1字符空間中,空白字符為:

'\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP)

其它的空白字符請參見策略Z和屬性Pattern_White_Space。

IsDigit(r rune) bool

檢測字符 rune r 是否是十進(jìn)制數(shù)字字符。

unicode.IsDigit('9')
// 返回 true
unicode.IsDigit('k')
// 返回 false

IsNumber(r rune) bool

檢測字符 rune r 是否是Unicode數(shù)字字符。

IsLetter(r rune) bool

檢測一個字符 rune r 是否是字母

unicode.IsLetter('9')
// 返回 false
unicode.IsLetter('k')
// 返回 true

IsGraphic(r rune) bool

一個字符 rune r 是否是 unicode 圖形字符。圖形字符包括字母、標(biāo)記、數(shù)字、符號、標(biāo)點、空白。

unicode.IsGraphic('9')
// 返回 true
unicode.IsGraphic(',')
// 返回 true

IsControl(r rune) bool

檢測一個字符 rune r 是否是 unicode 控制字符。

IsMark(r rune) bool

檢測一個字符 rune r 是否是標(biāo)記字符。

IsPrint(r rune) bool

檢測一個字符 rune r 是否是的可打印字符,基本與圖形字符一致,除ASCII空白字符U+0020。

IsPunct(r rune) bool

檢測一個字符 rune r 是否是 unicode標(biāo)點字符。

unicode.IsPunct('9')
// 返回 false
unicode.IsPunct(',')
// 返回 true

IsSymbol(r rune) bool

檢測一個字符 rune r 是否是 unicode 符號字符。

IsLower(r rune) bool

檢測一個字符 rune r 是否是小寫字母。

unicode.IsLower('h')
// 返回 true
unicode.IsLower('H')
// 返回 false

IsUpper(r rune) bool

檢測一個字符 rune r 是否是大寫字母。

unicode.IsUpper('h')
// 返回 false
unicode.IsUpper('H')
// 返回 true

IsTitle(r rune) bool

檢測一個字符 rune r 是否是Title字符。大部分字符的 Title 格式就是其大寫格式,少數(shù)字符的 Title 格式是特殊字符,例如???

unicode.IsTitle('?')
// 返回 true
unicode.IsTitle('h')
// 返回 false
unicode.IsTitle('H')
// 返回 true

To(_case int, r rune) rune

將字符 rune r 轉(zhuǎn)換為指定的格式,格式_case支持:unicode.UpperCase、unicode.LowerCase、unicode.TitleCase

unicode.To(unicode.UpperCase, 'h')
// 返回 H

ToLower(r rune) rune

將字符 rune r 轉(zhuǎn)換為小寫。

unicode.ToLower('H')
// 返回 h

func (SpecialCase) ToLower

將字符 rune r 轉(zhuǎn)換為小寫。優(yōu)先使用映射表 SpecialCase。
映射表 SpecialCase 是特定語言環(huán)境下大小寫的映射表。主要應(yīng)用于一些歐洲字符,例如土耳其 TurkishCase。

unicode.TurkishCase.ToLower('?')
// 返回 i

ToUpper(r rune) rune

將字符 rune r 轉(zhuǎn)換為大寫。

unicode.ToUpper('h')
// 返回 H

func (SpecialCase) ToUpper

將字符 rune r 轉(zhuǎn)換為大寫。優(yōu)先使用映射表 SpecialCase。
映射表 SpecialCase 是特定語言環(huán)境下大小寫的映射表。主要應(yīng)用于一些歐洲字符,例如土耳其 TurkishCase。

unicode.TurkishCase.ToUpper('i')
// 返回 ?

ToTitle(r rune) rune

將字符 rune r 轉(zhuǎn)換為 Title 字符。

unicode.ToTitle('h')
// 返回 H

func (SpecialCase) ToTitle

將字符 rune r 轉(zhuǎn)換為 Title 字符。優(yōu)先使用映射表 SpecialCase。
映射表 SpecialCase 是特定語言環(huán)境下大小寫的映射表。主要應(yīng)用于一些歐洲字符,例如土耳其 TurkishCase。

unicode.TurkishCase.ToTitle('i')
// 返回 ?

SimpleFold(r rune) rune

在 unicode 標(biāo)準(zhǔn)字符映射中查找與 rune r 互相對應(yīng)的 unicode 碼值。向碼值大的方向循環(huán)查找?;ハ鄬?yīng)指的是同一個字符可能出現(xiàn)的多種寫法。

unicode.SimpleFold('H')
// 返回 h
unicode.SimpleFold('Φ')) 
// 返回 φ

4unicode/utf8

DecodeLastRune(p []byte) (r rune, size int)

解碼 []byte p 中最后一個 UTF-8 編碼序列,返回該碼值和長度。

utf8.DecodeLastRune([]byte("小韓說課"))
// 返回 35838 3
// 35838 就是課的 unicode 碼值

DecodeLastRuneInString(s string) (r rune, size int)

解碼 string s 中最后一個 UTF-8 編碼序列,返回該碼值和長度。

utf8.DecodeLastRuneInString("小韓說課")
// 返回 35838 3
// 35838 就是課的 unicode 碼值

DecodeRune(p []byte) (r rune, size int)

解碼 []byte p 中第一個 UTF-8 編碼序列,返回該碼值和長度。

utf8.DecodeRune([]byte("小韓說課"))
// 返回 23567 3
// 23567 就是 小 的 unicode 碼值

DecodeRuneInString(s string) (r rune, size int)

解碼 string s 中第一個 UTF-8 編碼序列,返回該碼值和長度。

utf8.DecodeRuneInString("小韓說課")
// 返回 23567 3
// 23567 就是 小 的 unicode 碼值

EncodeRune(p []byte, r rune) int

將 rune r 的 UTF-8 編碼序列寫入 []byte p,并返回寫入的字節(jié)數(shù)。p 滿足足夠的長度。

buf := make([]byte, 3)
n := utf8.EncodeRune(buf, '康')
fmt.Println(buf, n)
// 輸出 [229 186 183] 3

FullRune(p []byte) bool

檢測 []byte p 是否包含一個完整 UTF-8 編碼。

buf := []byte{229, 186, 183} // 康
utf8.FullRune(buf)
// 返回 true
utf8.FullRune(buf[:2])
// 返回 false

FullRuneInString(s string) bool

檢測 string s 是否包含一個完整 UTF-8 編碼。

buf := "康" // 康
utf8.FullRuneInString(buf)
// 返回 true
utf8.FullRuneInString(buf[:2])
// 返回 false

RuneCount(p []byte) int

返回 []byte p 中的 UTF-8 編碼的碼值的個數(shù)。

buf := []byte("小韓說課")
len(buf)
// 返回 12
utf8.RuneCount(buf)
// 返回 4

RuneCountInString(s string) (n int)

返回 string s 中的 UTF-8 編碼的碼值的個數(shù)。

buf := "小韓說課"
len(buf)
// 返回 12
utf8.RuneCountInString(buf)
// 返回 4

RuneLen(r rune) int

返回 rune r 編碼后的字節(jié)數(shù)。

utf8.RuneLen('康')
// 返回 3
utf8.RuneLen('H')
// 返回 1

RuneStart(b byte) bool

檢測字節(jié) byte b 是否可以作為某個 rune 編碼的第一個字節(jié)。

buf := "小韓說課"
utf8.RuneStart(buf[0])
// 返回 true
utf8.RuneStart(buf[1])
// 返回 false
utf8.RuneStart(buf[3])
// 返回 true

Valid(p []byte) bool

檢測切片 []byte p 是否包含完整且合法的 UTF-8 編碼序列。

valid := []byte("小韓說課")
invalid := []byte{0xff, 0xfe, 0xfd}
utf8.Valid(valid)
// 返回 true
utf8.Valid(invalid)
// 返回 false

ValidRune(r rune) bool

檢測字符 rune r 是否包含完整且合法的 UTF-8 編碼序列。

valid := 'a'
invalid := rune(0xfffffff)
fmt.Println(utf8.ValidRune(valid))
// 返回 true
fmt.Println(utf8.ValidRune(invalid))
// 返回 false

ValidString(s string) bool

檢測字符串 string s 是否包含完整且合法的 UTF-8 編碼序列。

valid := "小韓說課"
invalid := string([]byte{0xff, 0xfe, 0xfd})
fmt.Println(utf8.ValidString(valid))
// 返回 true
fmt.Println(utf8.ValidString(invalid))
// 返回 false

完!
原文出自:小韓說課
微信關(guān)注:小韓說課
Go語言中多字節(jié)字符的處理

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

網(wǎng)站名稱:Go語言中多字節(jié)字符的處理-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://chinadenli.net/article34/cehcse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)建站公司、Google、微信小程序、軟件開發(fā)網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
久久这里只精品免费福利| 蜜桃臀欧美日韩国产精品| 亚洲欧美国产网爆精品| 免费高清欧美一区二区视频| 亚洲丁香婷婷久久一区| 日韩欧美国产亚洲一区| 黄片免费观看一区二区| 欧美人妻盗摄日韩偷拍| 国产精品视频一级香蕉| 久久精品久久久精品久久| 色婷婷视频国产一区视频| 成人精品国产亚洲av久久| 日本在线 一区 二区| 国产精品午夜性色视频| 在线免费观看黄色美女| 黄片免费在线观看日韩| 日本欧美一区二区三区就| 欧美日韩亚洲国产综合网| 欧美精品中文字幕亚洲| 国产精品内射婷婷一级二级| 丁香七月啪啪激情综合| 久久少妇诱惑免费视频| 在线中文字幕亚洲欧美一区 | 欧美不卡高清一区二区三区| 中国一区二区三区人妻| 91久久精品国产成人| 亚洲美女国产精品久久| 少妇人妻无一区二区三区| 91在线爽的少妇嗷嗷叫| 国产免费人成视频尤物| 亚洲一区精品二人人爽久久| 国产一区二区在线免费| 99久久国产精品免费| 青青操视频在线观看国产| 国产麻豆成人精品区在线观看| 成人精品国产亚洲av久久| 欧美三级大黄片免费看| 人妻露脸一区二区三区| 国内精品美女福利av在线| 老富婆找帅哥按摩抠逼视频| 久久99热成人网不卡|