string - 将 "=?UTF 8?.."(RFC 2047) 转换为 golang 中的常规字符串

标签 string encoding utf-8 go

我正在使用一个 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 包中的函数,支持编码 BQ 以及字符集 UTF-8US-ASCIIISO-8859-1。遗憾的是它没有导出,但您可以根据需要从中自由获取灵感 ;)

顺便说一句:我刚刚注意到您的示例字符串中的字符集是 UTF 8,这有点奇怪,因为编码的官方名称是 UTF -8.

关于string - 将 "=?UTF 8?.."(RFC 2047) 转换为 golang 中的常规字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28932140/

相关文章:

ios - 在iOS应用程序开发中,我需要显示一些日语字符,它是2个字节,但我找不到正确的编码来使用

c - 段错误错误?

java - 在java/android中获取带有匹配器的字符串列表

PHP:西里尔(俄语)字符作为问号回显。为什么?

c# - 如何在 C# 中将字符串转换为 UTF-8?

python - 如何将 subprocess.communicate() 转换为 utf-8 字符串?

c++ - 在不破坏多字节序列的情况下找到最长的 UTF-8 序列

Java 方法 CharAt 在与 # 比较时崩溃

r - 从字符串生成所有有间隙的 k-mer 序列

PHP、sql、UTF-8编码