doulei1965 2018-06-16 10:00
浏览 313

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

I need to encode the following string through base64 in golang

"{ \t\"signature\" = \"ZwXG56AezlHRTBhL8cTqA==\"; \t\"purchase-info\" = \"RXRjL0dNVCI7Cn0=\"; \t\"environment\" = \"Sandbox\"; \t\"pod\" = \"100\"; \t\"signing-status\" = \"0\"; }"

I try to do it as below

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

Output

ewoJInNpZ25hdHVyZSIgPSAiWndYRzU2QWV6bEhSVEJoTDhjVHFBPT0iOwoJInB1cmNoYXNlLWluZm8iID0gIlJYUmpMMGROVkNJN0NuMD0iOwoJImVudmlyb25tZW50IiA9ICJTYW5kYm94IjsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmluZy1zdGF0dXMiID0gIjAiOwp9

However, it failed. Because the result is different with the base64 result through https://www.base64encode.org/, which is

e1xuXHRcInNpZ25hdHVyZVwiID0gXCJad1hHNTZBZXpsSFJUQmhMOGNUcUE9PVwiO1xuXHRcInB1cmNoYXNlLWluZm9cIiA9IFwiUlhSakwwZE5WQ0k3Q24wPVwiO1xuXHRcImVudmlyb25tZW50XCIgPSBcIlNhbmRib3hcIjtcblx0XCJwb2RcIiA9IFwiMTAwXCI7XG5cdFwic2lnbmluZy1zdGF0dXNcIiA9IFwiMFwiO1xufQ==

Then I try it in this way

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

Output:

e1xuXHRcInNpZ25hdHVyZVwiID0gXCJad1hHNTZBZXpsSFJUQmhMOGNUcUE9PVwiO1xuXHRcInB1cmNoYXNlLWluZm9cIiA9IFwiUlhSakwwZE5WQ0k3Q24wPVwiO1xuXHRcImVudmlyb25tZW50XCIgPSBcIlNhbmRib3hcIjtcblx0XCJwb2RcIiA9IFwiMTAwXCI7XG5cdFwic2lnbmluZy1zdGF0dXNcIiA9IFwiMFwiO1xufQ==

Now the result is correct.

How to convert the original string from

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

to

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

in golang? or is there any better way to do that?

  • 写回答

1条回答 默认 最新

  • doushui20090526 2018-06-16 12:42
    关注

    Double quotes and backticks denote different string literals in Go: https://play.golang.org/p/wfIPUJtxT9n

    In particular, backslashes are not escape characters when used with backticks; they are preserved. For instance, len("\"") == 1 (byte 0x22), but len(`\"`) == 2 (bytes 0x5C and 0x22).

    This is defined 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 ('') inside raw string literals are discarded from the raw string value.

    评论

报告相同问题?

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等