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,