123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- // 通用工具
- // 秒寻科技
- // zt 2024-01-04
- package util
- import (
- "bytes"
- "fmt"
- "io"
- "math/rand"
- "strings"
- "github.com/google/uuid"
- "golang.org/x/text/encoding/simplifiedchinese"
- "golang.org/x/text/transform"
- )
- // 默认字符串表
- const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*?"
- // 项目编号字符串
- const projectIdCharset = "0123456789ABCDEF"
- // 生成 uuid
- func GenerateUuid() string {
- uuid := uuid.New().String()
- return uuid
- }
- // 生成随机字符串
- func GenRandomString(strLen int) string {
- sb := strings.Builder{}
- sb.Grow(strLen)
- for i := 0; i < strLen; i++ {
- sb.WriteByte(charset[rand.Intn(len(charset))])
- }
- return sb.String()
- }
- // 生成随机项目编号
- // strLen:字符长度
- // 返回值:项目编号ID
- func GenRandomProjectID(strLen int) string {
- sb := strings.Builder{}
- sb.Grow(strLen)
- for i := 0; i < strLen; i++ {
- sb.WriteByte(projectIdCharset[rand.Intn(len(projectIdCharset))])
- }
- return sb.String()
- }
- // 去掉字符串中的空字符
- func RemoveNullChars(s string) string {
- // 创建一个切片来存储结果字符串的字节
- var result []byte
- // 遍历输入字符串的每个字节
- for i := 0; i < len(s); i++ {
- // 检查当前字节是否是 \u0000(即空字符)
- if s[i] != 0 {
- // 如果不是空字符,则将其添加到结果切片中
- result = append(result, s[i])
- }
- }
- // 将结果切片转换回字符串并返回
- return string(result)
- }
- // 字符转换,将GBK格式(2字节标识一个汉字)的字符转成utf8字符(4字节表示一个汉字)
- func CharTransGbToUtf8(gb2312Bytes []byte) ([]byte, error) {
- //创建一个 GB2312到 UTF-8 的转换器
- reader := transform.NewReader(bytes.NewReader(gb2312Bytes), simplifiedchinese.GB18030.NewDecoder())
- //读取转换后的 UTF-8 编码的字节切片
- utf8Bytes, err := io.ReadAll(reader)
- if err != nil {
- fmt.Println("Error converting encoding:", err)
- return nil, err
- }
- // 将 UTF-8 编码的字节切片转换为字符串并打印
- return utf8Bytes, nil
- }
- // 字符转换,将utf8格式(4字节表示一个汉字)转成GBK格式(2字节标识一个汉字)
- func CharTransUtf8ToGb(utf8Bytes []byte) ([]byte, error) {
- var buf bytes.Buffer
- // 创建一个GB18030编码器
- encoder := simplifiedchinese.GB18030.NewEncoder()
- //将utf8转成gb
- _, err := transform.NewWriter(&buf, encoder).Write(utf8Bytes)
- if err != nil {
- return nil, err
- }
- //返回gb编码
- return buf.Bytes(), nil
- }
|