Json 从文件中加载的Unicode文本打印表情符号

Json 从文件中加载的Unicode文本打印表情符号,json,string,go,unicode,emoji,Json,String,Go,Unicode,Emoji,我正在尝试使用Go打印从JSON文件加载的Unicode表情符号。 当我加载并解组文件时,传递给fmt.Println的struct字段只打印转义的字符串序列 例如,一个字符串作为{…Unicode:\\U0001f47f}存储在文件中,打印它会产生\U0001f417而不是表情符号。 调用fmt.Printf%q,str将产生\\U0001f417。我没能找到解决办法,我有点不知所措。我试图删除转义序列并将其连接到模板字符串中,但没有效果。我还尝试使用字符串缓冲区,但它也不起作用。你可以这样做

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

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

你可以这样做吗

你能做到吗


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

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、 错误:=unquoteCodePoint\\U0001f47f 如果出错!=零{ //处理错误 }
fmt.Printf%s\n,s//prints使用以下函数将\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、 错误:=unquoteCodePoint\\U0001f47f 如果出错!=零{ //处理错误 }
fmt.Printf%s\n,s//prints类似\\U0001f417的内容不是代码点,而是需要解析以查找代码点的字符串。不幸的是,stdlib strconv.Unquote中的默认函数不能直接应用,因为它需要额外的引号和小写的u。所以:去掉任何不是数字和前导零的东西,解析十六进制数字并用fmt.Printf.Ah的%c动词格式化代码点,这是一个很棒的专业技巧。谢谢你的贡献!像\\U0001f417这样的东西不是代码点,而是需要解析以查找代码点的字符串。不幸的是,stdlib strconv.Unquote中的默认函数不能直接应用,因为它需要额外的引号和小写的u。所以:去掉任何不是数字和前导零的东西,解析十六进制数字并用fmt.Printf.Ah的%c动词格式化代码点,这是一个很棒的专业技巧。谢谢你的贡献!这真是太棒了!谢谢你也加入了评论;我总是被字符串编码绊倒。这真是太棒了!谢谢你也加入了评论;我总是被字符串编码绊倒。这是一个整洁的替代解决方案!感谢您加入。这是一个简洁的替代解决方案!谢谢你加入。