Golang 字符編碼


需要添加的庫

go get code.google.com/p/go.text/encoding
go get code.google.com/p/go.text/transform

 

兩個轉碼函數

 

import (
    "bytes"
    "code.google.com/p/go.text/encoding/simplifiedchinese"
    "code.google.com/p/go.text/transform"
    "io/ioutil"
)

func Decode(s []byte) ([]byte, error) {
    I := bytes.NewReader(s)
    O := transform.NewReader(I, simplifiedchinese.GBK.NewDecoder())
    d, e := ioutil.ReadAll(O)
    if e != nil {
        return nil, e
    }
    return d, nil
}

func Encode(s []byte) ([]byte, error) {
    I := bytes.NewReader(s)
    O := transform.NewReader(I, simplifiedchinese.GBK.NewEncoder())
    d, e := ioutil.ReadAll(O)
    if e != nil {
        return nil, e
    }
    return d, nil
}


下面是測試代碼:

func main() {
    log.SetFlags(log.LstdFlags | log.Lshortfile)
    resp, err := http.Get("http://data.earthquake.cn/datashare/globeEarthquake_csn.html")
    if err != nil {
        log.Fatal(err)
    }

    defer resp.Body.Close()
    input, err := ioutil.ReadAll(resp.Body)
    out := make([]byte, len(input))
    out = out[:]
    out, _ = Decode(input)
    ioutil.WriteFile("out.html", out, 0644)
    //func ReadFile(filename string) ([]byte, error)
    input, err = ioutil.ReadFile("out.html")
    out, _ = Encode(input)
    ioutil.WriteFile("out_gb.html", out, 0644)
}

 

還有以下是一些依賴iconv c庫的開源字符集轉換庫:   

1.iconv-go,通過cgo封裝了iconv庫;
2.qiniu iconv,同樣通過cgo封裝iconv庫;
3.go-charset,支持UTF-8轉換為其他字符集(非iconv庫),同時也封裝了iconv,提供更多字符集的轉換

這些在linux 上用用還好,到了windows 下要裝mingw,而且又有32位和64位的區別,比較煩,所以個人不喜歡

另外還有一個Mahonia—a character-set conversion library for Go,但是這個庫已經停止維護了。

如果沒有特別的要求,個人還是建議使用 code.google.com/p/go.text/encoding

這個庫要用hg來安裝,記得先安裝python 2.7 和Mercurial

 


免責聲明!

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



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