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. 2048 swift

    AppearanceProvider.swift import UIKit protocol AppearanceProviderProtocol:class { func tileColor(val ...

  2. Eclipse里的智能提示

    Eclipse 3.1里的智能提示功能对于写JAVA程序又不记得类名和函数的人来说是一个很好的助手工具,但是Eclipse里的智能提示的快捷键是Ctrl+Space,在中文Windows操作系统中它确 ...

  3. 【HDOJ】5155 Harry And Magic Box

    DP.dp[i][j]可以表示i行j列满足要求的组合个数,考虑dp[i-1][k]满足条件,那么第i行的那k列可以为任意排列(2^k),其余的j-k列必须全为1,因此dp[i][j] += dp[i- ...

  4. 【细说Java】方法重载的简单介绍

    1. 什么是重载 方法名称相同,但它们的参数类型或个数不同,这样,方法在被调用时编译器就可以根据参数的类型与个数的不同加以区分,这就是方法的重载. 既然可以通过参数类型或参数个数来作为重载条件,那返回 ...

  5. xamarin提供在线检查.net代码是否支援xamarin,ios,android

    大概是多少比你想的更多的移动.我们很高兴地宣布一个新的在线服务Xamarin NET移动扫描仪-扫描您的编译.NET代码的兼容性与Xamarin.iOSXamarin.Android是,Windows ...

  6. bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 8705  Solved: 3027[Submit][Statu ...

  7. 甲骨文公司 Oracle

    甲骨文公司 甲骨文公司,全称甲骨文股份有限公司,是全球最大的企业软件公司,总部位于美国加利福尼亚州的红木滩.甲骨文是继Microsoft之后,全球收入第二多的软件公司.甲骨文公司1989年正式进入中国 ...

  8. 《算法问题实战策略》-chaper7-穷举法

    关于这一章节<算法实战策略>有一段概述问题,我认为对于编程人员来说非常有价值,故在这里进行如下的摘抄: 构想算法是很艰难的工作.相比大家都经历过,面对复杂的要求只是傻乎乎地盯着显示器,或者 ...

  9. 链接器(linker)的作用——CSAPP第7章读书笔记

    首先说说我为什么要去读这一章.这个学期开OS的课,在Morden Operating System上读到和Process有关的内容时看到这样一句话:“Process is fundamentally ...

  10. 利用"NOTIFYICONDATA"实现MFC的托盘程序

    本文章为转发百度空间内容,,保存一下,以防以后用到.. 一.自定义信息 在头文件中加入下面这句话: #define WM_SHOWTASK (WM_USER+1) 二.MYDLG.CPP文件中添加_m ...