用goalng實現ascii、UCS2、UTF-8文字字串的解碼與編碼
阿新 • • 發佈:2021-01-07
用goalng實現ANSI、UCS2、UTF-8文字字串的解碼與編碼
用到的外部包:
"github.com/axgle/mahonia"
ANSI的解碼與編碼
未解碼內容示例:
C4E3BAC3D1BDA3ACBAC3BFAAD0C4A3A1
解碼之後內容:
你好呀,好開心!
解碼程式碼:
func Ansi2String(ascii string) string {
var baKeyword = make([]byte, len(ascii)/2)
for i := 0; i < len(baKeyword); i++ {
baKeyword[i] = byte(0xff & StringToInt64(ascii[i*2:i*2+2]))
}
return mahonia.NewDecoder("GBK").ConvertString(string(baKeyword[:]))
}
func StringToInt64(str string) int64 {
if val, err := strconv.ParseInt(str, 16, 64); err != nil {
panic(err)
} else {
return val
}
return 0
}
編碼程式碼:
func String2Ansi(str string) string {
if str == "" {
return ""
}
bytesTemp := []byte(mahonia.NewEncoder("GBK").ConvertString(str))
var buffer bytes.Buffer
for i := 0; i < len(bytesTemp); i++ {
buffer.WriteString(fmt.Sprintf("%x", bytesTemp[ i]&0xff))
}
return strings.ToUpper(mahonia.NewEncoder("UTF-8").ConvertString(buffer.String()))
}
UCS2的解碼與編碼
未解碼內容示例:
4F60597D5440FF0C597D5F005FC3FF01
解碼之後內容:
你好呀,好開心!
解碼:
func Ucs2Tostring(str string) string {
var sUnicodev = make([]string, 0)
for i := 0; i < len(str); i = i + 4 {
sUnicodev = append(sUnicodev, str[i:i+4])
}
var context string
for _, v := range sUnicodev {
if len(v) < 1 {
continue
}
temp, err := strconv.ParseInt(v, 16, 32)
if err != nil {
panic(err)
}
context += fmt.Sprintf("%c", temp)
}
return context
}
編碼:
func StringToucs2(inStr string) string {
if inStr == "" {
return ""
}
u := utf16.Encode([]rune(inStr))
dst := make([]byte, len(u)*2)
wi := 0
for _, r := range u {
binary.BigEndian.PutUint16(dst[wi:], uint16(r))
wi += 2
}
return strings.ToUpper(fmt.Sprintf("%x", dst))
}
UTF-8的編碼與解碼
未解碼內容示例:
E4BDA0E5A5BDE59180EFBC8CE5A5BDE5BC80E5BF83EFBC81
解碼之後內容:
你好呀,好開心!
解碼:
func Utf8Encode2String(str string) string {
hexData, err := hex.DecodeString(str)
if err != nil {
panic(err)
}
// 將 byte 轉換 為字串 輸出結果
return string(hexData)
}
編碼:
func String2Utf8(str string) string{
return strings.ToUpper(fmt.Sprintf("%x", str))
}