github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/encoding/unicode/unicode.go (about) 1 package unicode 2 3 import ( 4 "bytes" 5 "strconv" 6 ) 7 8 // Encode 对字符串进行unicode编码 9 func Encode(str string) string { 10 rs := []rune(str) 11 json := "" 12 html := "" 13 for _, r := range rs { 14 rint := int(r) 15 if rint < 128 { 16 json += string(r) 17 html += string(r) 18 } else { 19 json += "\\u" + strconv.FormatInt(int64(rint), 16) 20 } 21 } 22 return json 23 } 24 25 // Decode 对字符串进行unicode解码 26 func Decode(unicodeStr string) string { 27 buf := bytes.NewBuffer(nil) 28 i, j := 0, len(unicodeStr) 29 for i < j { 30 x := i + 6 31 if x > j { 32 buf.WriteString(unicodeStr[i:]) 33 break 34 } 35 if unicodeStr[i] == '\\' && unicodeStr[i+1] == 'u' { 36 hex := unicodeStr[i+2 : x] 37 r, err := strconv.ParseUint(hex, 16, 64) 38 if err == nil { 39 buf.WriteRune(rune(r)) 40 } else { 41 buf.WriteString(unicodeStr[i:x]) 42 } 43 i = x 44 } else { 45 buf.WriteByte(unicodeStr[i]) 46 i++ 47 } 48 } 49 return buf.String() 50 }