Unicode 同样是转化为16进制,有什么区别?

Unicode 同样是转化为16进制,有什么区别?

Unicode

		signStr := fmt.Sprintf("%x", j)
		fmt.Println(signStr) //是unicode
		fmt.Println(hex.EncodeToString([]byte(str)))
		A := string(rstr)
		fmt.Println(A) //不是Unicode,但是
  • 不能转换英文、数字和特殊字符
	sText := "王通"
	textQuoted := strconv.QuoteToASCII(sText)
	//textQuoted := strconv.Quote(sText)
	textUnquoted := textQuoted[1 : len(textQuoted)-1]
	fmt.Println(textUnquoted)

	sUnicodev := strings.Split(textUnquoted, "\\u")
	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)
	}
	fmt.Println(context)
  • 同样不能转换英文和数字,但是有json和html两个版本
	rs := []rune("golang中文unicode编码")
	json := ""
	html := ""
	for _, r := range rs {
     
		rint := int(r)
		if rint < 128 {
     
			json += string(r)
			html += string(r)
		} else {
     
			json += "\\u" + strconv.FormatInt(int64(rint), 16) // json
			html += "&#" + strconv.Itoa(int(r)) + ";"          // 网页
		}
	}
	fmt.Printf("JSON: %s\n", json)
	fmt.Printf("HTML: %s\n", html)
  • Unicode和String互转,英文和数字都会转意
package main

import (
	"bytes"
	"encoding/binary"
	"encoding/hex"
	"fmt"
	"strings"
)

func main() {
     
	str := "Go爱好者"
	U:=Stou(str)
	fmt.Println(U)
	S,_ := Utos(U)
	fmt.Println(S)
}


/**
Unicode转化为String
 */
func Utos(form string) (to string, err error) {
     
	bs, err := hex.DecodeString(strings.Replace(form, `\u`, ``, -1))
	if err != nil {
     
		return
	}
	for i, bl, br, r := 0, len(bs), bytes.NewReader(bs), uint16(0); i < bl; i += 2 {
     
		binary.Read(br, binary.BigEndian, &r)
		to += string(r)
	}
	return
}


/**
String转化为Unicode
*/
func Stou(form string) (to string) {
     
	for _,j := range form {
     
		signStr := fmt.Sprintf("%x", j)
		for i := 4-len(signStr);i>0;i-- {
     
			signStr = "0"+signStr
		}
		to = to+"\\u"+signStr
	}
	return
}

你可能感兴趣的:(Go,Go,Unicode)