1. 程式人生 > >Go實戰--go中編碼轉換(The way to go)

Go實戰--go中編碼轉換(The way to go)

生命不止,繼續 go go go !!!

編碼問題在每種語言中都會遇到,尤其對於中國的碼農來說,更是常見的問題,因為我們的漢字有一點點特別。所以需要一些自己的編碼,這就需要進行一些適當的轉換。

例如,C++開發中,我們經常會用到wstring與string的互相轉換。

所以,今天就介紹一下Golang中的編碼轉換,我們介紹一個庫:mahonia

mahonia

Mahonia is a character-set conversion library implemented in Go. All data is compiled into the executable; it doesn’t need any external data files.

Mahonia is now deprecated. I recommend using the standard package at golang.org/x/text/encoding, possibly along with golang.org/x/net/charset

看到了作用了吧,但是,細心的朋友確實發現了上面英文描述的重點deprecated,已經被棄用了,但是我還是簡單的介紹一下吧,共同學習。

下載,解壓,然後把mahonia資料夾放到GOPATH的src資料夾下即可(這裡根據實際情況進行)。

讀寫檔案
新建一個text.txt,鍵入內容“大寶劍”

寫程式:

package
main import ( "bufio" "fmt" "log" "mahonia" "os" "strings" "time" ) func main() { //生成日誌檔案 t := time.Now() filepath := "./log_" + strings.Replace(t.String()[:19], ":", "_", 3) + ".txt" file, err := os.OpenFile(filepath, os.O_CREATE, 0666) if err != nil { log.Fatal("failed!"
) } defer file.Close() wFile := bufio.NewWriter(file) wFile.WriteString(readfile()) wFile.Flush() } func readfile() string { f, err := os.Open("test.txt") if err != nil { return err.Error() } defer f.Close() buf := make([]byte, 1024) decoder := mahonia.NewDecoder("gb18030") if decoder == nil { fmt.Println("編碼不存在!") return "編碼不存在!" } var str string = "" for { n, _ := f.Read(buf) if 0 == n { break } //解碼為UTF-8 fmt.Println(string(buf[:n])) str += decoder.ConvertString(string(buf[:n])) fmt.Println(str) } return str }

這裡寫圖片描述

相關推薦

Go實戰--go編碼轉換(The way to go)

生命不止,繼續 go go go !!! 編碼問題在每種語言中都會遇到,尤其對於中國的碼農來說,更是常見的問題,因為我們的漢字有一點點特別。所以需要一些自己的編碼,這就需要進行一些適當的轉換。 例如,C++開發中,我們經常會用到wstring與string的

Go實戰--go使用base64加密(The way to go)

生命不止,繼續 Go go go !!! base64加密你一點也不會陌生,Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一,大家可以檢視RFC2045~RFC2049,上面有MIME的詳細規範。Base64編碼可用於在HTTP環境下傳遞

Go實戰--實現簡單的restful api(The way to go)

生命不止,繼續 go go go !!! 今天跟大家介紹一下如何使用go建立一套restful api,我們依託於開源庫gorilla/mux。 let’s go~~ 何為RESTful API A RESTful API is an app

Go實戰--實現一個簡單的tcp服務端和客戶端(The way to go)

生命不止,繼續 go go go !!! 之前介紹了go為我們提供的net/http包,很方便的建立一些api。 今天就來點實戰,寫一個簡單的tcp的服務端、客戶端程式。 按照國際慣例,還是先介紹一點點基礎知識。 * net.Listen* Liste

Go語言學習之sync包(臨時物件池Pool、互斥鎖Mutex、等待Cond)(the way to go)

golang的特點就是語言層面支援併發,並且實現併發非常簡單,只需在需要併發的函式前面新增關鍵字go。 但是如何處理go併發機制中不同goroutine之間的同步與通訊,golang 中提供了sync包來解決相關的問題,當然還有其他的方式比如channel,原子操作atomic等等,這裡先

Go實戰--golang讀寫檔案的幾種方式

讀寫檔案應該是在開發過程中經常遇到的,今天要跟大家一起分享的就是在golang的世界中,如何讀寫檔案。 使用io/ioutil進行讀寫檔案 其中提到了兩個方法: func ReadFile func ReadFile(filename string) ([]by

Go實戰 golang生成讀取二維碼 skip2/go qrcode和boombuler/barcode

                     生命不止,繼續go go go!!!這裡介紹一下,golang如何生成二維碼,當然是面向github程式設計了。QRCode百度百科: QR Code碼,是由Denso公司於1994年9月研製的一種矩陣二維碼符號,它具有一維條碼及其它二維條碼所具有的資訊容量大、可靠性

Go實戰 golang使用WebSocket實時聊天室 gorilla/websocket nkovacs/go s

                     生命不止,繼續 go go go!!!其實,早就應該跟大家分享golang中關於websocket的使用,但是一直不知道從何入手,也不能夠很清晰的描述出來。今天就淺嘗輒止,通過第三方庫實現websocket。WebSocketWebSocket協議是基於TCP的一種新

Go實戰--golang操作PDF(rsc.io/pdf、jung-kurt/gofpdf、signintech/gopdf)

生命不止,繼續 go go go !!! 那麼今天就跟大家分享一下,golang中如何操作PDF。 PDF簡介 The Portable Document Format (PDF) is a file format used to present do

Go實戰--golang檔案以及資料夾路徑相關操作

生命不止,繼續 go go go!!! 之前介紹過golang的標準庫:path/filepath, os 今天就跟大家分享幾個關於檔案以及資料夾的相關操作。 獲取目錄中所有檔案 使用包: io/ioutil 使用方法: ioutil.Re

Go實戰--golang使用JWT(JSON Web Token)

今天就來跟大家簡單介紹一下golang中如何使用token,當然是要依賴一下github上的優秀的開源庫了。 首先,要搞明白一個問題,token、cookie、session的區別。 token、cookie、session的區別Cookie  Cookie總是儲存在客戶端中,按在

Go實戰--golang使用HTTPS以及TSL(.crt、.key、.pem區別以及crypto/tls包介紹)

HTTP與HTTPS 在WWDC 2016上,蘋果在釋出iOS 9的同時也向開發者傳遞了一個訊息,那就是到2017年1月1日時App Store中所有應用都必須啟用 App Transport Security應用程式安全傳輸協議,從而提升應用和系統安全性。 HTTP

Go實戰--golang使用echo框架、MongoDB、JWT搭建REST API(labstack/echo、gopkg.in/mgo.v2、dgrijalva/jwt-go)

生命不止,繼續go go go !!! 今天,繼續echo框架,這次加入mongodb作為持久化儲存,使用jwt進行驗證,來搭建一套rest api,類似Twitter。 程式碼結構: ./model post.go user.

Go實戰--golang使用firebase實時資料庫(zabawaba99/firego)

生命不止,繼續 go go go !!! 今天,就跟大家一起學習分享一下golang中如何使用firebase的實時資料庫。 Firebase 實時資料庫 利用我們的 NoSQL 雲端資料庫儲存和同步資料。資料會跨所有客戶端進行實時同步,無論您的應用是

Go實戰--golang使用Goji微框架(Goji+Mongodb構建微服務)

生命不止,繼續 go go go!!! 今天跟大家分享一個web微框架Goji. Goji What is Goji? 枸杞? Goji is a HTTP request multiplexer, similar to net/http.Serv

Go實戰--golang使用redis(redigo和go-redis/redis)

生命不止,繼續 go go go !!! 今天跟大家分享的是如何在golang中使用redis資料庫。 何為redis Redis is an in-memory database open-source software project impl

Artificial Intelligence way to go for businesses? 90% executives believe so

It seems artificial intelligence (AI) is the way to go for businesses and corporate. Going by a recent study, as many as 90 per cent of executives feel AI

Magic Leap's inaugural conference shows it has a long way to go

If I had to summarize my reaction to LeapCon, Magic Leap's inaugural developer conference, it's one of surprise. Not because of the various software demos,

Poco 編碼轉換

 Poco::UnicodeConverter::toUTF8(ws,uft8);  // 把Unicode轉成utf8  Poco::UnicodeConverter::toUTF16(uft8,ws); //把uft8圍成Unicode 其它的編碼轉換 可以自己

101343A On The Way to Lucky Plaza

題目地址 題意:有m個商店,Alaa想買k個巧克力,每個商店只能買一塊巧克力,Alaa進每個商店的概率是一樣的,問你在買第k個巧克力的時候是在第n家店的概率是多少,然後答案化成分數取模的形式。 其實挺簡單的,就是坑有點。。。 我們可以知道要求的概率為C(n−1,