Golang的字符編碼介紹


                  Golang的字符編碼介紹

                                    作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

  Go里面內建僅支持UTF8字符串編碼,因此如果你用fmt.Printf之類的函數無法將GBK,GB2312等編碼隨意轉換打印。在 Golang 中轉換 UTF-8 與 GBK 編碼的文本,可以使用 Go 官方的 golang.org/x/text 包實現,這個包可以通過下面的命令安裝:“go get golang.org/x/text”。

  如果訪問 golang.org 站點存在困難,也可以使用下面的命令通過 github 下載 text 包的代碼,下載完成后,再手工將其移動至 $GOROOT 目錄中完成安裝。

 1 [root@yinzhengjie github.com]# git clone --depth 1 https://github.com/golang/text.git
 2 [root@yinzhengjie github.com]# ll
 3 總用量 24
 4 drwxr-xr-x+  3 root root 4096 12月  5 16:14 gorilla
 5 drwxr-xr-x+  3 root root 4096 11月 22 09:43 Go-SQL-Driver
 6 drwxr-xr-x+ 20 root root 4096 12月  7 12:30 text
 7 [root@yinzhengjie github.com]# pwd
 8 /yinzhengjie/golang/path/src/github.com
 9 [root@yinzhengjie github.com]# mkdir -p golang.org/x/
10 [root@yinzhengjie github.com]# cp text -R  golang.org/x/
11 [root@yinzhengjie github.com]# go env | grep GOROOT
12 GOROOT="/yinzhengjie/golang/local"
13 [root@yinzhengjie github.com]# cp -r /yinzhengjie/golang/path/src/github.com/golang.org /yinzhengjie/golang/local/src/
14 [root@yinzhengjie github.com]#

   接下來我們看一個典型的案例:

 1 package main
 2 
 3 import (
 4     "bytes"
 5     "golang.org/x/text/encoding/simplifiedchinese"
 6     "golang.org/x/text/transform"
 7     "io/ioutil"
 8     "fmt"
 9 )
10 
11 func GbkToUtf8(s []byte) ([]byte, error) {
12     reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewDecoder())
13     d, e := ioutil.ReadAll(reader)
14     if e != nil {
15         return nil, e
16     }
17     return d, nil
18 }
19 
20 
21 func Utf8ToGbk(s []byte) ([]byte, error) {
22     reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewEncoder())
23     d, e := ioutil.ReadAll(reader)
24     if e != nil {
25         return nil, e
26     }
27     return d, nil
28 }
29 
30 func main() {
31     s := "尹正傑到此一游"
32     gbk, err := Utf8ToGbk([]byte(s))
33     if err != nil {
34         fmt.Println(err)
35     } else {
36         fmt.Println("以GBK的編碼方式打開:",string(gbk))
37     }
38 
39     utf8, err := GbkToUtf8(gbk)
40     if err != nil {
41         fmt.Println(err)
42     } else {
43         fmt.Println("以UTF8的編碼方式打開:",string(utf8))
44     }
45 }

  以上代碼執行結果如下:

 


免責聲明!

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



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