json - 如何在golang中对特殊的json字符串进行base64编码?

标签 json go base64

我需要在golang中通过base64对以下字符串进行编码

"{\n\t\"签名\"=\"ZwXG56AezlHRTBhL8cTqA==\";\n\t\"购买信息\"=\"RXRjL0dNVCI7Cn0=\";\n\t\"环境\"=\"沙盒\";\n\t\"pod\"=\"100\";\n\t\"签名状态\"=\"0\";\n}"

我尝试按如下方式进行

rec = []byte("{\n\t\"signature\" = \"ZwXG56AezlHRTBhL8cTqA==\";\n\t\"purchase-info\" = \"RXRjL0dNVCI7Cn0=\";\n\t\"environment\" = \"Sandbox\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}")
str := base64.StdEncoding.EncodeToString(rec)
fmt.Println(str)

输出

ewoJInNpZ25hdHVyZSIgPSAiWndYRzU2QWV6bEhSVEJoTDhjVHFBPT0iOwoJInB1cmNoYXNlLWluZm8iID0gIlJYUmpMMGROVkNJN0NuMD0iOwoJImVudmlyb25tZW50IiA9ICJTYW5kym94I jsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmluZy1zdGF0dXMiID0gIjAiOwp9

但是,它失败了。因为通过https://www.base64encode.org/与base64结果不一样,即

e1xuXHRcInNpZ25hdHVyZVwiID0gXCJad1hHNTZBZXpsSFJUQmhMOGNUcUE9PVwiO1xuXHRcInB1cmNoYXNlLWluZm9cIiA9IFwiUlhSakwwZE5WQ0k3Q24wPVwiO1xuXHRcImVudmlyb25 tZW50XCIgPSBcIlNhbmRib3hcIjtcblx0XCJwb2RcIiA9IFwiMTAwXCI7XG5cdFwic2lnbmluZy1zdGF0dXNcIiA9IFwiMFwiO1xufQ==

那我就这样试试

data1 := []byte(`{\n\t\"signature\" = \"ZwXG56AezlHRTBhL8cTqA==\";\n\t\"purchase-info\" = \"RXRjL0dNVCI7Cn0=\";\n\t\"environment\" = \"Sandbox\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}`)
str1 := base64.StdEncoding.EncodeToString(data1)
fmt.Println(str1)

输出:

e1xuXHRcInNpZ25hdHVyZVwiID0gXCJad1hHNTZBZXpsSFJUQmhMOGNUcUE9PVwiO1xuXHRcInB1cmNoYXNlLWluZm9cIiA9IFwiUlhSakwwZE5WQ0k3Q24wPVwiO1xuXHRcImVudmlyb25 tZW50XCIgPSBcIlNhbmRib3hcIjtcblx0XCJwb2RcIiA9IFwiMTAwXCI7XG5cdFwic2lnbmluZy1zdGF0dXNcIiA9IFwiMFwiO1xufQ==

现在结果是正确的。

如何将原始字符串转换为

[]byte("{\n\t\"signature\" = \"ZwXG56AezlHRTBhL8cTqA==\";\n\t\"purchase-info\" = \"RXRjL0dNVCI7Cn0=\";\n\t\"environment\" = \"Sandbox\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}")

[]byte(`{\n\t\"signature\" = \"ZwXG56AezlHRTBhL8cTqA==\";\n\t\"purchase-info\" = \"RXRjL0dNVCI7Cn0=\";\n\t\"environment\" = \"Sandbox\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}`) 

在戈兰?或者有更好的方法吗?

最佳答案

双引号和反引号在 Go 中表示不同的字符串文字: https://play.golang.org/p/wfIPUJtxT9n

特别是,反斜杠与反引号一起使用时不是转义字符;它们被保存下来。例如,len("\"") == 1(字节 0x22),但 len(`\"`) == 2(字节 0x5C 和 0x22)。

这已定义in the spec :

Raw string literals are character sequences between back quotes, as in foo. Within the quotes, any character may appear except back quote. The value of a raw string literal is the string composed of the uninterpreted (implicitly UTF-8-encoded) characters between the quotes; in particular, backslashes have no special meaning and the string may contain newlines. Carriage return characters ('\r') inside raw string literals are discarded from the raw string value.

关于json - 如何在golang中对特殊的json字符串进行base64编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50886884/

相关文章:

ios - restkit json 示例

java - 将 base64 格式的图像发送到 Java 网络服务器,转换并保存

javascript - 将 Base64 图像上传到 .NET Web 服务并在那里进行转换

ios - initWithObjectAndkeys 如何在 iOS 中使用变量

json - Webservice-多种文件输出格式

Android JSON 解析问题

postgresql - 如何在 GORM 中将 PostgreSQL 函数设置为默认值?

go - 为 Go-Glide 指定缓存目录

go - 在 gomail v2 中发送带有可选附件的电子邮件

linux - Base64 是否有不同的编码约定?