12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package util
- import (
- "bytes"
- "io/ioutil"
- "golang.org/x/text/encoding/simplifiedchinese"
- "golang.org/x/text/transform"
- )
- func IsGBK(data []byte) bool {
- length := len(data)
- var i int = 0
- for i < length {
- if data[i] <= 0x7f {
- //编码0~127,只有一个字节的编码,兼容ASCII码
- i++
- continue
- } else {
- //大于127的使用双字节编码,落在gbk编码范围内的字符
- if data[i] >= 0x81 &&
- data[i] <= 0xfe &&
- data[i+1] >= 0x40 &&
- data[i+1] <= 0xfe &&
- data[i+1] != 0xf7 {
- i += 2
- continue
- } else {
- return false
- }
- }
- }
- return true
- }
- func GbkToUtf8(s []byte) ([]byte, error) {
- reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewDecoder())
- d, e := ioutil.ReadAll(reader)
- if e != nil {
- return nil, e
- }
- return d, nil
- }
|