2015-03-08 96 views
5

我使用的API和它的返回是這樣的其他語言文本 「= UTF-8 ..?」:轉換(RFC 2047),以一個普通字符串golang

=?UTF 8?B?2KfZhNiu2LfZiNin2Kog2KfZhNiq2Yog2KrYrNmF2Lkg2KjZitmG?= =?UTF 8?B?INit2YHYuCDYp9mE2YLYsdin2ZPZhiDYp9mE2YPYsdmK2YUg2YjZgQ==?= =?UTF 8?B?2YfZhdmHINmF2YXYpyDYp9mU2YXZhNin2Ycg2KfZhNi52YTYp9mF?= =?UTF 8?B?2Kkg2LnYqNivINin2YTZhNmHINin2YTYutiv2YrYp9mGLnBkZg==?=

是這是一種常見的格式?我將如何將其轉換爲golang中的常規字符串?

Golang通常處理多種語言,但我不確定如何去轉換。

回答

6

Aparrently您的API正在返回RFC 2047 format編碼的數據。基本上,這個定義如下:

encoded-word = "=?" charset "?" encoding "?" encoded-text "?=" 

這意味着你的字符集是UTF-8(非常方便,因爲這是圍棋的本地字符集),並且您的編碼是Base64編碼。您必須解碼的文本是「B?」之間的文本和「?=」。所以你所要做的就是接收這個文本並且打電話:

base64.StdEncoding.DecodeString(text) 

得到原始的UTF-8字符串。

有一個在net/mail包轉到STDLIB的decodeRFC2047Word()功能,支持的編碼BQ和字符集UTF-8US-ASCIIISO-8859-1。可惜這不是出口,但你可以自由,因爲你需要從它採取儘可能多的靈感;)

BTW:我只注意到字符集在您的示例字符串是UTF 8,這是一個有點古怪,因爲編碼的正式名稱是UTF-8

+0

它的儀表板,它是在一個去除我的處理步驟。 – John 2015-03-08 22:44:43

+0

*誤刪除 – John 2015-03-08 22:56:40

2

自走1.5,你可以使用mime.WordDecoder.DecodeHeader

package main 

import (
    "fmt" 
    "mime" 
) 

func main() { 
    dec := new(mime.WordDecoder) 
    header, err := dec.DecodeHeader("=?UTF-8?B?2KfZhNiu2LfZiNin2Kog2KfZhNiq2Yog2KrYrNmF2Lkg2KjZitmG?= =?UTF-8?B?INit2YHYuCDYp9mE2YLYsdin2ZPZhiDYp9mE2YPYsdmK2YUg2YjZgQ==?= =?UTF-8?B?2YfZhdmHINmF2YXYpyDYp9mU2YXZhNin2Ycg2KfZhNi52YTYp9mF?= =?UTF-8?B?2Kkg2LnYqNivINin2YTZhNmHINin2YTYutiv2YrYp9mGLnBkZg==?=") 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(header) 
    // Output: لخطوات التي تجمع بين حفظ القرآن الكريم وفهمه مما أملاه العلامة عبد الله الغديان.pdf 
} 

如果您正在使用圍棋的舊版本,你可以用我的替代庫:https://github.com/alexcesaro/quotedprintable

相關問題