前言
Go语言中统一使用UTF-8编码格式,但是在操作设备的时候,设备侧的编码格式为GBK,那么如何转换及计算字节数呢?
一、GBK编码
GBK编码占1个或者2个字节,不能简单的通过字符格式计算字节数。
UTF8占1~4个字节不等,如果不直接把UTF8格式的字符串转换成GBK编码,则计算就会出错。
二、解决的办法
先进行字符编码格式转换,在通过len函数计算字节数,示例代码如下:
import (
"bytes"
"io/ioutil"
"testing"
"unicode/utf8"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
)
func TestGBKLength(t *testing.T) {
str := "兔年大吉2022-02-03AbcD您好"
t.Logf("UTF8字符数:%d", utf8.RuneCountInString(str))
t.Logf("UTF8字节数:%d", len(str))
reader := transform.NewReader(bytes.NewReader([]byte(str)), simplifiedchinese.GBK.NewEncoder())
d, e := ioutil.ReadAll(reader)
if e != nil {
t.Fatal(e)
}
t.Logf("GBK字节数:%d", len(d))
}
运行结果:
UTF8字符数:20
UTF8字节数:32
GBK字节数:26
总结
在实际开发中要分清楚字符数和字节数,有的产品说明不严谨,说的是32个字符其实是32个字节,GBK编码格式下输入16个汉字就提示超过32个字符了。