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

lin*_*say 2 string unicode json go emoji

我正在尝试使用 Go 打印从 JSON 文件加载的 Unicode 表情符号字符。当我加载和解组我的文件时,传递给的 struct 字段fmt.Println只打印转义的字符串序列。

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

Cer*_*món 9

使用以下函数将格式中指定的符文转换为\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
}
Run Code Online (Sandbox Code Playgroud)

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

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

像这样使用字符串版本:

s, err := unquoteCodePoint("\\U0001f47f")
if err != nil {
    // handle error
}
fmt.Printf("%s\n", s) // prints  
Run Code Online (Sandbox Code Playgroud)