我们说我有一个像这样的文本文件。
\u0053
\u0075
\u006E
有没有办法可以将其转换为此?
S
u
n
目前,我正在使用ioutil.ReadFile("data.txt")
,但是当我打印数据时,我获得了unicode代码点而不是字符串文字。我意识到这是ReadFile
的正确行为,它不是我想要的。
我的目标是用他们的文字字符替换代码点。
答案 0 :(得分:3)
您可以使用strconv.Unquote()
和strconv.UnquoteChar()
功能进行转换。
您应该注意的一点是strconv.Unquote()
只能取消引号中的字符串(例如,引号char "
或后引号char `
的开头和结尾) ,所以我们必须手动追加。
见这个例子:
lines := []string{
`\u0053`,
`\u0075`,
`\u006E`,
}
fmt.Println(lines)
for i, v := range lines {
var err error
lines[i], err = strconv.Unquote(`"` + v + `"`)
if err != nil {
fmt.Println(err)
}
}
fmt.Println(lines)
fmt.Println(strconv.Unquote(`"Go\u0070\x68\x65\x72"`))
输出(在Go Playground上尝试):
[\u0053 \u0075 \u006E]
[S u n]
Gopher <nil>
答案 1 :(得分:2)
稍微不同的方法是使用strconv.ParseInt
,这会产生更少的垃圾并使用更少的内部逻辑(Unquote
执行许多其他检查)来解析这些行:
for i, v := range lines {
if len(v) != 6 {
continue
}
if r, err := strconv.ParseInt(v[2:], 16, 32); err == nil {
lines[i] = string(r)
}
}