从文件加载的 Unicode 文字打印表情符号



我正在尝试使用 Go 打印从 JSON 文件加载的 Unicode 表情符号。 当我加载和取消封送文件时,传递给fmt.Println的结构字段仅打印转义的字符串序列。

例如,一个字符串作为{…"Unicode":"\U0001f47f"}存储在文件中,打印它会产生U0001f417而不是表情符号字符。 调用fmt.Printf("%q", str)会产生\U0001f417。我无法找到解决方案,我有点困惑。我试图删除转义序列并将其连接到模板字符串中,但它没有影响。我也尝试使用字符串缓冲区,但它也没有用。

>使用以下函数将格式Uxxxxxxxx中指定的符文转换为实际符文:

func unquoteCodePoint(s string) (rune, error) {
// 16 specifies hex encoding
// 32 is size in bits of the rune type
r, err := strconv.ParseInt(strings.TrimPrefix(s, "\U"), 16, 32)
return rune(r), err
}

变体是转换为字符串而不是符文:

func unquoteCodePoint(s string) (string, error) {
r, err := strconv.ParseInt(strings.TrimPrefix(s, "\U"), 16, 32)
return string(r), err
}

像这样使用字符串版本:

s, err := unquoteCodePoint("\U0001f47f")
if err != nil {
// handle error
}
fmt.Printf("%sn", s) // prints  👿

你能做到吗?https://play.golang.org/p/4mFQfyqeAXN

package main
import (
"fmt"
"html"
"strconv"
"strings"
)
func main() {
xx := "\U0001f47f"
// Hex String
h := strings.ReplaceAll(xx, "\U", "0x")
// Hex to Int
i, _ := strconv.ParseInt(h, 0, 64)
// Unescape the string (HTML Entity -> String).
str := html.UnescapeString(string(i))
// Display the emoji.
fmt.Println(str)
}

最新更新