2015-12-07 55 views
3

假設我有一個這樣的文本文件。轉換Unicode字符代碼指向文字字符

\u0053 
\u0075 
\u006E 

有沒有辦法將其轉換爲此?

S 
u 
n 

目前,我使用ioutil.ReadFile("data.txt"),但是當我打印的數據,我得到的Unicode代碼點,而不是字符串文字。我意識到這是ReadFile的正確行爲,它只是不想要我想要的。

我的目標是用它們的文字字符替換代碼點。

回答

2

您可以使用strconv.Unquote()strconv.UnquoteChar()函數進行轉換。你應該知道的

的一件事是strconv.Unquote()只能引文結束串是在引號(例如開始與報價焦炭"或反引號字符`結束),所以我們必須手動添加這一點。

見下面的例子:

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

稍微不同的方法是使用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) 
    } 
} 

playground