1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-16 18:52:27 +08:00

feat: add Utf8ToGbk and GbkToUtf8

This commit is contained in:
dudaodong
2023-06-08 15:50:44 +08:00
parent 7311f84772
commit 83832daeb1
3 changed files with 70 additions and 0 deletions

View File

@@ -11,12 +11,15 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"io"
"math" "math"
"reflect" "reflect"
"strconv" "strconv"
"strings" "strings"
"github.com/duke-git/lancet/v2/structs" "github.com/duke-git/lancet/v2/structs"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
) )
// ToBool convert string to boolean. // ToBool convert string to boolean.
@@ -375,3 +378,19 @@ func ToInterface(v reflect.Value) (value interface{}, ok bool) {
return nil, false return nil, false
} }
} }
// Utf8ToGbk convert utf8 encoding to GBK encoding.
// Play: todo
func Utf8ToGbk(bs []byte) ([]byte, error) {
r := transform.NewReader(bytes.NewReader(bs), simplifiedchinese.GBK.NewEncoder())
b, err := io.ReadAll(r)
return b, err
}
// GbkToUtf8 convert GBK encoding to utf8 encoding.
// Play: todo
func GbkToUtf8(bs []byte) ([]byte, error) {
r := transform.NewReader(bytes.NewReader(bs), simplifiedchinese.GBK.NewDecoder())
b, err := io.ReadAll(r)
return b, err
}

View File

@@ -4,6 +4,9 @@ import (
"fmt" "fmt"
"reflect" "reflect"
"strconv" "strconv"
"unicode/utf8"
"github.com/duke-git/lancet/v2/validator"
) )
func ExampleToBool() { func ExampleToBool() {
@@ -364,3 +367,27 @@ func ExampleToInterface() {
// abc // abc
// true // true
} }
func ExampleUtf8ToGbk() {
utf8Data := []byte("hello")
gbkData, _ := Utf8ToGbk(utf8Data)
fmt.Println(utf8.Valid(utf8Data))
fmt.Println(validator.IsGBK(gbkData))
// Output:
// true
// true
}
func ExampleGbkToUtf8() {
gbkData, _ := Utf8ToGbk([]byte("hello"))
utf8Data, _ := GbkToUtf8(gbkData)
fmt.Println(utf8.Valid(utf8Data))
fmt.Println(string(utf8Data))
// Output:
// true
// hello
}

View File

@@ -5,9 +5,11 @@ import (
"reflect" "reflect"
"strconv" "strconv"
"testing" "testing"
"unicode/utf8"
"github.com/duke-git/lancet/v2/internal" "github.com/duke-git/lancet/v2/internal"
"github.com/duke-git/lancet/v2/slice" "github.com/duke-git/lancet/v2/slice"
"github.com/duke-git/lancet/v2/validator"
) )
func TestToChar(t *testing.T) { func TestToChar(t *testing.T) {
@@ -396,3 +398,25 @@ func TestToInterface(t *testing.T) {
assert.EqualValues(nil, nilVal) assert.EqualValues(nil, nilVal)
assert.Equal(false, ok) assert.Equal(false, ok)
} }
func TestUtf8ToGbk(t *testing.T) {
assert := internal.NewAssert(t, "TestUtf8ToGbk")
utf8Data := []byte("hello")
gbkData, err := Utf8ToGbk(utf8Data)
assert.Equal(true, utf8.Valid(utf8Data))
assert.Equal(true, validator.IsGBK(gbkData))
assert.IsNil(err)
}
func TestGbkToUtf8(t *testing.T) {
assert := internal.NewAssert(t, "TestGbkToUtf8")
gbkData, err := Utf8ToGbk([]byte("hello"))
utf8Data, err := GbkToUtf8(gbkData)
assert.IsNil(err)
assert.Equal(true, utf8.Valid(utf8Data))
assert.Equal("hello", string(utf8Data))
}