我新建一个文件,并以二进制形式往里写入大写字母 A 的 ASCII 所对应的 01000001 ,按理说,把文件以文本格式打开,显示的应该是 A ,占用一个字符,但结果显示是 01000001 ,占用 8 个字符
fd = open('./a.test', 'xb')
fd.write(b'01000001')
为什么呢?是因为缺少 EOF 之类控制字符吗,在写入进文件时被 IDE 直接优化成文本吗?又或者打开时被文本软件优化了?
对于一个二进制文件,以文本格式打开,文本软件会把二进制 bit 按照每 8bit 算作一个字符对照 ascii 编码表翻译,而 ascii 最大值是 01111111 ,也就是说如果有 8bit 大于这个数,如 10111111 ,因为找不到参照,文本软件就会显示乱码是吗?乱码字符对应的那个图案是从哪找的呢?
还有如果二进制文件的大小不是 8bit 整数倍,假如最后剩下 3bit ,文本软件也会显示乱码吗?
所以有了 base64 ,使用 6bit 全部占满的编码方式重新编码二进制文件,保证不会出现乱码,然后在网页和邮件中传输是吗?但实际没必要,直接在网络中使用原始二进制传输也可以,只是网页和邮件的协议要求而已,对吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.