需要添加的庫
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。