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  }