Go 字符串编码

Go 字符串介绍

GoLang 字符串 string 本质上是作为字节数组保存的,使用的编码为 utf-8。

可直接将 string 转换为 utf-8 格式的字节数组:

s := "GoLang 字符串"
utf8Bytes := []byte(s)

Go 中的字符串与 GB18030 的编解码

Go 最新版本应该是没有完全支持 GB18030-2022 的,可以看到一个打开的 issue: x/text: incorrectly decodes all GBK/GB18030 double-byte PUA characters to U+FFFD

  1. string按照 GB18030 编码为字节数组
s := "GoLang 字符串"
gbEncoder := simplifiedchinese.GB18030.NewEncoder()
gbBytes, _, err := transform.Bytes(gbEncoder, []byte(s))
if err != nil {
    log.Fatal(err)
}
  1. 字节数组按照 GB18030 解码为string
gbDecoder := simplifiedchinese.GB18030.NewDecoder()
utf8Bytes, _, err := transform.Bytes(gbDecoder, gbBytes)
if err != nil {
    log.Fatal(err)
}
result := string(utf8Bytes)