我正在使用API并且它会为其他语言文字返回类似的内容:
=?UTF 8?B?2KfZhNiu2LfZiNin2Kog2KfZhNiq2Yog2KrYrNmF2Lkg2KjZitmG?= =?UTF 8?B?INit2YHYuCDYp9mE2YLYsdin2ZPZhiDYp9mE2YPYsdmK2YUg2YjZgQ==?= =?UTF 8?B?2YfZhdmHINmF2YXYpyDYp9mU2YXZhNin2Ycg2KfZhNi52YTYp9mF?= =?UTF 8?B?2Kkg2LnYqNivINin2YTZhNmHINin2YTYutiv2YrYp9mGLnBkZg==?=
这是一种常见的格式吗?我如何将它转换为golang中的常规字符串?
Golang通常会处理多种语言,但我不确定如何进行转换。
答案 0 :(得分:7)
您的API通常会返回RFC 2047 format中编码的数据。基本上,这定义了以下内容:
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
这意味着你的charset是UTF-8(非常方便,因为这是Go的本机字符集),你的编码是Base64。您必须解码的文本是“B?”之间的文本。和“?=”。所以你要做的就是接受那个文本并致电:
base64.StdEncoding.DecodeString(text)
获取原始的UTF-8字符串。
Go stdlib的net/mail
包中有一个decodeRFC2047Word()
函数,支持编码B
和Q
以及字符集UTF-8
,{{1} }和US-ASCII
。不幸的是它没有出口,但你可以随心所欲地从中获取灵感;)
BTW:我刚刚注意到示例字符串中的字符集是ISO-8859-1
,这有点奇怪,因为编码的正式名称是UTF 8
。
答案 1 :(得分:3)
从Go 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
}
如果您使用的是旧版Go,则可以使用我的替换库:https://github.com/alexcesaro/quotedprintable