gbk_util.go 819 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package util
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "golang.org/x/text/encoding/simplifiedchinese"
  6. "golang.org/x/text/transform"
  7. )
  8. func IsGBK(data []byte) bool {
  9. length := len(data)
  10. var i int = 0
  11. for i < length {
  12. if data[i] <= 0x7f {
  13. //编码0~127,只有一个字节的编码,兼容ASCII码
  14. i++
  15. continue
  16. } else {
  17. //大于127的使用双字节编码,落在gbk编码范围内的字符
  18. if data[i] >= 0x81 &&
  19. data[i] <= 0xfe &&
  20. data[i+1] >= 0x40 &&
  21. data[i+1] <= 0xfe &&
  22. data[i+1] != 0xf7 {
  23. i += 2
  24. continue
  25. } else {
  26. return false
  27. }
  28. }
  29. }
  30. return true
  31. }
  32. func GbkToUtf8(s []byte) ([]byte, error) {
  33. reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewDecoder())
  34. d, e := ioutil.ReadAll(reader)
  35. if e != nil {
  36. return nil, e
  37. }
  38. return d, nil
  39. }