在Go中将带有UTF-8字节字符串的命令行输出转换为Unicode代码点

时间:2019-04-10 18:21:46

标签: go unicode utf-8

我正在通过os.Exec从Go运行可执行文件,它为我提供以下输出:(\\xe2\\x96\\xb2)。输出包含一个UTF-8字节字符串,我想将其转换为相应的Unicode代码点(U + 25B2)。我期望看到或尝试转换为的是:“(▲)”。 我已经在Go Blog(https://blog.golang.org/strings)中查看了该条目,但是它以Interpreted字符串文字开始,而命令输出似乎是Raw字符串文字。我尝试过strconv.Quotestrconv.Unquote,但并没有达到我想要的目的。

1 个答案:

答案 0 :(得分:0)

您可以使用strconv包来解析包含转义序列的字符串文字。

一种快速而肮脏的方法是简单地添加缺少的引号,并使用strconv.Unquote将其解释为带引号的字符串

s := `\xe2\x96\xb2`
s, err := strconv.Unquote(`"` + s + `"`)

您还可以使用strconv.UnquoteChar

一次直接将字符串解析为一个字符(Unquote内部进行此操作)。
s := `\xe2\x96\xb2`
buf := make([]byte, 0, 3*len(s)/2)
for len(s) > 0 {
    c, _, ss, err := strconv.UnquoteChar(s, 0)
    if err != nil {
        log.Fatal(err)
    }
    s = ss
    buf = append(buf, byte(c))
}
s = string(buf)

https://play.golang.org/p/6SDij9d-aRr