golang编码转换,支持多种数据结构
package tools
import (
"bytes"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
"io/ioutil"
)
type EncodeConversion struct {
}
func (e EncodeConversion) Conversion(data interface{}, t transform.Transformer) interface{} {
switch data.(type) {
case string:
r := transform.NewReader(bytes.NewBufferString(data.(string)), t)
b, err := ioutil.ReadAll(r)
if err == nil {
data = string(b)
}
return data
case []string:
arr := data.([]string)
for k, v := range arr {
arr[k] = e.Conversion(v, t).(string)
}
data = arr
case map[int64]string:
arr := data.(map[int64]string)
for k, v := range arr {
arr[k] = e.Conversion(v, t).(string)
}
data = arr
case map[int64]interface{}:
arr := data.(map[int64]interface{})
for k, v := range arr {
arr[k] = e.Conversion(v, t).(interface{})
}
data = arr
case map[string]string:
arr := data.(map[string]string)
for k, v := range arr {
arr[k] = e.Conversion(v, t).(string)
}
data = arr
case map[string]interface{}:
arr := data.(map[string]interface{})
for k, v := range arr {
arr[k] = e.Conversion(v, t).(interface{})
}
data = arr
}
return data
}
func (e EncodeConversion) ToGBK (data interface{}) interface{} {
return e.Conversion(data, simplifiedchinese.GBK.NewEncoder())
}
func (e EncodeConversion) ToUTF8 (data interface{}) interface{} {
return e.Conversion(data, simplifiedchinese.GBK.NewDecoder())
}