从文件

时间:2019-04-16 03:30:08

标签: json string go unicode emoji

我正在尝试使用GoLang打印从JSON文件加载的Unicode表情符号字符。当我加载和解组文件时,传递给fmt.Println的struct字段仅显示转义的字符串序列。例如,一个字符串以{..."Unicode":"\\U0001f47f"}的形式存储在文件中,将其打印会产生\U0001f417而不是表情符号字符。调用fmt.Printf("%q", str)会产生\\U0001f417。我找不到解决方案,我有些困惑。我试图删除转义序列并将其连接在模板字符串中,但这没有影响。我也尝试使用字符串缓冲区,但是它也不起作用。任何建议都非常感谢!

2 个答案:

答案 0 :(得分:3)

您可以这样做吗? https://play.golang.org/p/4mFQfyqeAXN

192-count

答案 1 :(得分:3)

使用以下函数将以\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("%s\n", s) // prints