为什么最流行的编码算法是刚好带两个符号破坏兼容性的 base64,而不是能够无视大小写的 base36、不带符号的 base62?这两个符号不仅严重影响兼容性使标准码表的 base64 不能直接拼在 url 中,还没有增加多少信息密度

116 天前
 drymonfidelia

base64 的编码结果并不是二进制,码表长度是 2 的整数次方没有任何的加成。

被 base64 坑了好几次,按=截断 key=value 数据的时候忘记指定 maxsplit=1 导致=后面的数据丢掉。

5949 次点击
所在节点    程序员
49 条回复
GeekGao
115 天前
延续 40 楼的发言:
Base64 最早是在 1993 年由 IETF (互联网工程任务组)定义的。当时,它作为 MIME (多用途互联网邮件扩展)协议的一部分被提出。
在那之前,互联网主要用于电子邮件和文件传输,但 WWW ( World Wide Web )还处于非常早期的阶段。Base64 并不是专门为 WWW 发明的,但它恰好在 WWW 开始普及之际被标准化。这种巧合使得 Base64 成为 WWW 生态系统中的一个重要工具,为网页中的二进制数据传输提供了可靠的解决方案。
n18255447846
115 天前
1. base64 应用广泛
2. 处理 url 需要 encode/decode
Terminl
115 天前
@drymonfidelia 这个还真不是 base64 的锅,完全是你的个人技术问题,图片传输也用 base64,data:image/png;base64,这种多符号的你不是丢失的更多信息?
iceheart
115 天前
k/v 解析只需要处理到第一个分隔符,
有 bug 改就完了。
qiumaoyuan
115 天前
我把内容一字不漏的复制给了 claude ,得出了和楼上各位差不多的回答。
ShuWei
115 天前
会不会是你直接拿=去分割 url 的做法本身就不合理呢
yianing
114 天前
base64 里有给 url 准备的编码方式,golang 里叫 URLEncoding ,标准的是 StdEncoding
inza9hi
114 天前
@lisongeee 这里比较坑的点是 url 可能被 encoding 多次。
举例:A 服务返回一个 json ,里面有一个 url B 服务调用 A 服务,返回给客户端,这时候是否要
lisongeee
113 天前
@inza9hi

只要按照使用标准序列化对象解析/构造 url ,无论服务调用多少次都不可能出现这种问题

但是实际上很多程序员都是半吊子懒狗,都喜欢手动拼接/分割参数,这就容易导致解码/编码时破坏整个 url

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1069022

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX