我正在使用一个 API,它为其他语言文本返回类似这样的内容:
=?UTF 8?B?2KfZhNiu2LfZiNin2Kog2KfZhNiq2Yog2KrYrNmF2Lkg2KjZitmG?= =?UTF 8?B?INit2YHYuCDYp9mE2YLYsdin2ZPZhiDYp9mE2YPYsdmK2YUg2YjZgQ==?= =?UTF 8?B?2YfZhdmHINmF2YXYpyDYp9mU2YXZhNin2Ycg2KfZhNi52YTYp9mF?= =?UTF 8?B?2Kkg2LnYqNivINin2YTZhNmHINin2YTYutiv2YrYp9mGLnBkZg==?=
这是一种常见的格式吗?我将如何将其转换为 golang 中的常规字符串?
Golang 通常可以很好地处理多种语言,但我不确定如何进行转换。
最佳答案
显然您的 API 正在返回编码为 RFC 2047 format 的数据.基本上,这定义了以下内容:
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
这意味着您的字符集是 UTF-8(非常方便,因为这是 Go 的 native 字符集),并且您的编码是 Base64。您必须解码的文本是“B?”之间的文本。和“?=”。所以你所要做的就是拿走那条短信并打电话:
base64.StdEncoding.DecodeString(text)
获取原始的UTF-8字符串。
有一个decodeRFC2047Word()
Go 标准库的 net/mail
包中的函数,支持编码 B
和 Q
以及字符集 UTF-8
、US-ASCII
和 ISO-8859-1
。遗憾的是它没有导出,但您可以根据需要从中自由获取灵感 ;)
顺便说一句:我刚刚注意到您的示例字符串中的字符集是 UTF 8
,这有点奇怪,因为编码的官方名称是 UTF -8
.
关于string - 将 "=?UTF 8?.."(RFC 2047) 转换为 golang 中的常规字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28932140/