uucode编码是把任意二进制数据转换为ascii字符的编码
用于在一些只能传递文本的地方传送二进制数据

uu模块提供了encode()和decode()用于将一个文件转换为
uucode编码的字符文件,文件的内容以begin开头以end结尾
中间内容即转换的内容

codecs模块的encode(),decode()参数encoding='uu-codec'
用于在数据与数据之间转换(bytes <---> str:uucode)

binascii.a2b_uu()和binascii.b2a_uu()也用作在bytes与
uucode之间的转换,区别是它不带标头信息(不带begin,end)

str <---> bytes <---> uucode

binascii.b2a_uu(bytes) 把bytes转换为uucode
binascii.a2b_uu(uucode) 把uucode转换为bytes

codecs.encode(bytes, 'uu-codec') 把bytes转换为uucode,带header
codecs.decode(uucode, 'uu-codec') 把uucode(带header)转换为bytes

uu模块用于二进制数据与uucode编码之间的转换
file参数接受file-like对象
为了向后兼容,也接受带有路径的文件名字符串,也可以是'-'表示标准输入输出
此接口已被标记为废弃,调用者应该自己打开文件,用'rb'或'wb'模式
uu.encode(in_file, out_file, name = None, mode = None)
把in_file编码为uucode输出到out_file
编码后的文件带有header信息,指定的name和mode
in_file:输入文件.以'rb'模式打开.
out_file:指定输出文件
name: 指定一个名字, 默认是'-'表示标准输入输出
mode 文件权限,默认是 0o666

uu.decode(in_file, out_file = None, mode = None, quiet = False)
把uucode编码的文件in_file解码到out_file
in_file: 输入文件,uucode编码文件
out_file 指定输出文件,如果不存在则用mode创建.如果不指定,则用in_file的header
mode 指定文件权限,如果不指定,则用in_file的header
注意,如果使用默认的header创建文件,如果文件已存在,则抛出异常.
quiet: 编码错误则打印警告;如果为True则不打印警告

二进制,字符编码,uucode编码之间的相互转换

import uu, codecs, binascii

a = '测试'.encode() #str -> bytes
b = codecs.encode(a, 'uu-codec') #bytes -> uucode
c = codecs.decode(b, 'uu-codec') #uucode -> bytes
d = binascii.b2a_uu(a) #bytes -> uucode
e = binascii.a2b_uu(d) #uucode -> bytes
print(a)
print(b)
print(c)
print(d)
print(e)

以下是测试uu模块的encode,decode的用法

#把一个二进制文件转换为uucode文本文件
#文件必须以二进制方式打开 with open('py2c.exe', 'rb') as in_file, open('test.txt', 'wb') as out_file:
uu.encode(in_file, out_file) #默认name='-',mode=0o666 #解码 with open('test.txt', 'rb') as in_file:
uu.decode(in_file) #默认输出是'-',所以输出到了命令行,也可以指定参数输出到文件

上面的操作由于编码时没指定名字,所以解码时无法知道原始文件名,也就没法知道这到底是个什么文件

#测试2:指定名字

with open('py2c.exe', 'rb') as in_file, open('test.txt', 'wb') as out_file:
uu.encode(in_file, out_file, name = in_file.name) #解码 with open('test.txt', 'rb') as in_file:
uu.decode(in_file) #得到文件py2c.exe,如果已存在,则异常

采用默认的header信息中的文件名,如果已存在,则抛出异常,而如果是指定的文件名已存在,则不会抛出异常,而是覆盖

with open('test.txt', 'rb') as in_file:
uu.decode(in_file, 'py2c.exe') #如果py2c.exe已存在,则覆盖

研究一下uucode编码的更多相关文章

  1. 杂谈SharpDx中的WIC组件——我们需要WIC的图片编码功能么?

    在前文 SharpDX之Direct2D教程II——加载位图文件和保存位图文件 中,发现在VB2010中不能很好的运用SharpDx中的WIC组件进行图片的编码工作.可能是我的设置问题,也可能是Sha ...

  2. speex的基本编码和解码流程

    最近在研究speex的编码和解码流程 之前在IM上用到的都是发语音片段,这个很简单,只需要找到googlecode上gauss的代码,然后套一下就可以用了. 不过googlecode要关闭,有人将他导 ...

  3. 肠道微生物研究进展 | Microbiology | Human Gut Microbiome | human gut microbiota

    之前我有过一篇16s基本概念和数据分析的文章.16S 基础知识.分析工具和分析流程详解 可以分成两部分,生物层面和技术层面. 生物层面: 1. 肠道微生物里面包含了哪些微生物?显然包含了所有层面的微生 ...

  4. PHP防SQL注入不要再用addslashes和mysql_real_escape_string

    PHP防SQL注入不要再用addslashes和mysql_real_escape_string了,有需要的朋友可以参考下. 博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助 ...

  5. AngularJS中实现无限级联动菜单

    多级联动菜单是常见的前端组件,比如省份-城市联动.高校-学院-专业联动等等.场景虽然常见,但仔细分析起来要实现一个通用的无限分级联动菜单却不一定像想象的那么简单.比如,我们需要考虑子菜单的加载是同步的 ...

  6. spring MVC学习笔记

    为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平.你的一个决定会影响团队未来的几年.要考虑方面太多: 1.简单易用,以提高开发效率.使小部分的精力在框架上,大部 ...

  7. ubuntu下读取数据库中文乱码解决

    请按如下配置myqsl.cnf (/etc/mysql/mysql.conf.d/mysql.cnf ),然后重启mysql服务,对于web程序,你可以把web所有编码都搞成utf-8[client] ...

  8. 坚持自学的第二天,bootstrap初入门

    前言 昨天,初步学完了jekyll目录结构与Liquid语法的应用与认识. 日志 今天刚入门,做了一个bootstrap导航栏,但是选中状态不行,找了JS中写好的API,写法与视频中讲的有点不一样,但 ...

  9. ffmpeg API录制rtsp视频流

    原文出自http://blog.csdn.net/zxwangyun/article/details/8190638#reply   作者 Sloan 这里在录制时,并没有进行转码,只是相当于把rts ...

随机推荐

  1. Solr In Action 笔记(2) 之 评分机制(相似性计算)

    Solr In Action 笔记(2) 之评分机制(相似性计算) 1 简述 我们对搜索引擎进行查询时候,很少会有人进行翻页操作.这就要求我们对索引的内容提取具有高度的匹配性,这就搜索引擎文档的相似性 ...

  2. 【HDOJ】1717 小数化分数2

    简单字符串处理. #include <cstdio> #include <cstring> #include <cmath> #include <ctype. ...

  3. thickbox 关于动态生成 无法跳出弹出框的问题

    问题描述: 用jQuery动态生成thickbox的连接代码,发现没有效果. 原因: thickbox在页面加载后,会给a,input,area等绑定弹出事件. 通过tb_init(’a.thickb ...

  4. -_-#【Better Code】字符串匹配

    提高 web 应用性能之 JavaScript 性能调优

  5. LeetCode——Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  6. 快速生成apk 自动发布到网站 便于测试

    遇到的问题: 开发者生成的apk 需要不断给 测试安装让他们测试.有没有脚本自动将最新apk上传到服务器,让测试自己安装测试呢?mac电脑 怎么自己搭建文件服务器  启动Tomcat功能在这里不在赘述 ...

  7. Java习惯用法总结

    在微博中看到的一个不错的帖子,总结的很详细,拷贝过来,一是为了方便自己查阅,也能和大家一起共享,后面有原文的链接地址: 在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的.在 ...

  8. Java学习日记-2.1 运算符

    1. 赋值运算符 赋值运算符是有值的 int i; System.out.println(i = 5); //输出5 正因为赋值运算符有值,所以可以可以连等地赋值 int j,k,l,m,n; j = ...

  9. 解决Xcode7 iOS9苹果将原http协议改成了https协议问题

    在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbi ...

  10. Nodejs 发送短信验证码

    1.需要安装模块 >npm install leanengine --save-dev 2.调用模块 const AV=require("leanengine"); 3.配置 ...