2015-03-08 134 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

相关问题