UUencode编码起先用在unix网络中,先是Unix系统下将二进制的资料借由uucp邮件系统传输的一个编码程式,也是一种二进制到文字的编码。不属于MIME编码中一员。它也是定义了用可打印字符表示二进制文字一种方法,并不是一种新的编码集合。主要解决,二进制字符在传输、存储中问题。它早期在电子邮件中使用较多,最近这些年来基本上被MIME 中Base64所取代了。E-mail中一般采用UU、MIME、BINHEX三种编码标准! 我想,了解下这种编码将二进制字符转换为可打印字符实现思路!对我们以后做类似处理工作,应该会有很多的启示。
UUencode编码过程
Uuencode将输入资料以每三个字节为单位进行编码,如此重复进行。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6-bit为单位分为4个群组,每个群组以十进制来表示所出现的数值只会落在0到63之间。将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。每60个编码输出(相当于45个输入字节)将输出为独立的一行,每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是'M'这个ASCII字符(77=32+45),最后一行的长度字符为32+剩下的字节数目这个ASCII字符。如果是一个 0字节那它应该被转换为0×60而不是0×20,因为(前引用'`')优于 0×20(空格' ‘)。
特点一:看到特点了吧,也是64字符,也是一组6位。怎么,怎么,跟我们的base64这么相似呢?是的,从这个定义中,我们确实发现它跟base64比起来很相似了。
特点二:它定义64字符,不用写映射表,是通过加32转换到可打印字符范围中。比起base64,更为简单!
思考问题:它的字符范围都是可打印字符,我们会发现64字符集合中,有很多是特殊字符:”!”#¥%&‘()*+='” 等等。这些字符在不同应用中,可能都有些特殊用途。因此,在使用该编码时候,或许会出现一些问题。我想这也许是UUencode编码方法,逐渐被Base64所取代的原因吧。
UUencode 64字符集
可打印字符
十进制ASCII值
uuencode
二进制表示
uuencode
十进制表示
可打印字符
十进制ASCII值
uuencode
二进制表示
uuencode
十进制表示
(space)
32
000 000
0
@
64
100 000
32
!
33
000 001
1
A
65
100 001
33
"
34
000 010
2
B
66
100 010
34
#
35
000 011
3
C
67
100 011
35
$
36
000 100
4
D
68
100 100
36
%
37
000 101
5
E
69
100 101
37
&
38
000 110
6
F
70
100 110
38
'
39
000 111
7
G
71
100 111
39
(
40
001 000
8
H
72
101 000
40
)
41
001 001
9
I
73
101 001
41
*
42
001 010
10
J
74
101 010
42
+
43
001 011
11
K
75
101 011
43
,
44
001 100
12
L
76
101 100
44
-
45
001 101
13
M
77
101 101
45
.
46
001 110
14
N
78
101 110
46
/
47
001 111
15
O
79
101 111
47
0
48
010 000
16
P
80
110 000
48
1
49
010 001
17
Q
81
110 001
49
2
50
010 010
18
R
82
110 010
50
3
51
010 011
19
S
83
110 011
51
4
52
010 100
20
T
84
110 100
52
5
53
010 101
21
U
85
110 101
53
6
54
010 110
22
V
86
110 110
54
7
55
010 111
23
W
87
110 111
55
8
56
011 000
24
X
88
111 000
56
9
57
011 001
25
Y
89
111 001
57
:
58
011 010
26
Z
90
111 010
58
;
59
011 011
27
[
91
111 011
59
<
60
011 100
28
92
111 100
60
=
61
011 101
29
]
93
111 101
61
>
62
011 110
30
^
94
111 110
62
"jbborder" cellspacing="0" rules="all" border="1">
原始字符
C
a
t
原始ASCII码(十进制)
67
97
116
ASCII码(二进制)
0
1
0
0
0
0
1
1
0
1
1
0
0
0
0
1
0
1
1
1
0
1
0
0
新的十进制数值
16
54
5
52
+32
48
86
37
84
编码后的Uuencode字符
0
V
%
T
字符串:'Cat‘ 编码后是:oV%T
UUencode PHP实现过程
编码转换过程,与Base64类似!下面代码是实现过程,我们可以看看转换方法!
/** *uuencode编码* *@author 程默 *@copyright http://blog.chacuo.net/ *@param string $src 待处理字符串 *@return string encode编码完字符串 */ function c_uu_encode($src) { ///每次读取3个字节 $lbyte = 3; ////将原始的3个字节转换为4个字节 $slen=strlen($src); $smod = ($slen%$lbyte); $snum = floor($slen/$lbyte); $desc = array(); //将剩下字节以0字节补齐 $src = $smod===0"\0",$lbyte-$smod); $snum = $smod===0"`"代替 foreach ($_dec as &$v) { $v = $v===0"\r\n"; $alen = count($desc); $anum = floor($alen/$abyte); $amod = ($alen%$abyte); $adesc = array(); for ($i=0;$i<$anum;$i++) { $adesc[]='M'.implode('',array_slice($desc,$i*$abyte,$abyte)).$crlf; } ///截取后面剩余数组长度 if($amod!==0) { ///以下计算不满45字节编码情况 $adesc[]=chr($amod/4*3+32+($smod"//img.jbzj.com/file_images/article/201606/20160604212520.png" alt="" />该代码转换结果,跟使用工具转换结果一致。我查看了线上一些转换方法,很多结果不一致!最好,大家使用在线工具转换前,做一下比较!没有做过验证的代码,可能会给你带来麻烦!欢迎分享你的方法!
UUencode,UU编码介绍
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]