如果您输入的内容为string
,例如
s := "\\U0001f618"
您可以使用strconv.Unquote()
取消引用。确保传递给它的字符串带引号(必须用反引号或双引号引起来):
s2,err := strconv.Unquote(`"` + s + `"`)
fmt.Println(s2,err)
这将为您提供一个包含表情符号的s2
字符串:
? <nil>
Java的字符串模型是一个char[]
,其中包含UTF-16 code points。 Go的string
内存模型是UTF-8编码的字节序列。
要将Go字符串转换为UTF-16,可以使用标准库的unicode/utf16
包。例如,utf16.Encode()
将一系列rune
(unicode码点)编码为UTF-16。您可以从Go string
中获得一系列符文,其类型简单为conversion:[]rune("some string")
。
u16 := utf16.Encode([]rune(s2))
fmt.Printf("%X\n",u16)
上面以十六进制格式打印UTF16代码点:
[D83D DE18]
要获取所需的格式,请使用以下循环:
buf := &strings.Builder{}
for _,v := range u16 {
fmt.Fprintf(buf,"\\u%X",v)
}
fmt.Println(buf.String())
哪个输出:
\uD83D\uDE18
在Go Playground上尝试示例。
您可以在函数中捕获这一系列转换:
func convert(s string) (string,error) {
s2,err := strconv.Unquote(`"` + s + `"`)
if err != nil {
return "",err
}
buf := &strings.Builder{}
for _,v := range utf16.Encode([]rune(s2)) {
fmt.Fprintf(buf,v)
}
return buf.String(),nil
}
使用它:
fmt.Println(convert("\\U0001f618"))
哪个输出(在Go Playground上尝试):
\uD83D\uDE18 <nil>
本文链接:https://www.f2er.com/3095507.html