Uuencode

uuencode這個名字是衍生自"Unix-to-Unix encoding"，原先是Unix系統下將二進位的資料藉由uucp郵件系統傳輸的一個編碼程式，是一種二進位到文字的編碼。uudecode是與uuencode搭配的解碼程式，uuencode/decode常見於電子郵件中的檔案傳送以及usenet新聞群組和BBS的貼文等等。近來已被MIME所大量取代。

 編碼程序 
Uuencode的編碼結果輸出檔案格式如下：
 begin <輸入檔存取模式> <輸入檔名>
 <編碼內容>
 [<編碼內容>]
 [...]
 `
 end
 <輸入檔存取模式> 
沿用自Unix系統檔案存取權限模式，由三個八進位的數字組成，其構成形式為：

擁有人 群組 其他人 讀取（r） 寫入（w） 執行（x） 讀取（r） 寫入（w） 執行（x）讀取（r） 寫入（w） 執行（x）

舉例而言：當<輸入檔存取模式>為 666，轉換成二進位碼為110110110，也就是擁有人、群組以及其他人對於這個檔案都有讀取以及寫入的權力。

 <輸入檔名> 
將編碼前的檔名填入。

 <編碼內容> 
當檔案內容空無一物時，<編碼內容>就不存在。否則<編碼內容>會以下面形式出現：
 <長度字元><編碼字元字串>

Uuencode將輸入資料以每三個位元組為單位進行編碼，如此重複進行。如果最後剩下的資料少於三個位元組，不夠的部份用零補齊。這三個位元組共有24個Bit，以6-bit為單位分為4個群組，每個群組以十進位來表示所出現的數值只會落在0到63之間。將每個數加上32，所產生的結果剛好落在ASCII字元集中可列印字元（32-空白...95-底線）的範圍之中。

 <長度字元> 
每60個編碼輸出（相當於45個輸入位元組）將輸出為獨立的一行，每行的開頭會加上長度字元，除了最後一行之外，長度字元都應該是'M'這個ASCII字元（77=32+45），最後一行的長度字元為32+剩下的位元組數目這個ASCII字元。

 <編碼字元字串> 
<編碼字元字串>是依照編碼結果依序填入，惟獨要注意一點：當6-bit的資料為零時，編碼應為空白這個字元，但是在uuencode中都用`這個字元來取代，這是因為它們的末六bit都是 100.000。

 例外狀況 
前面所說的只適用於使用ASCII字元集的電腦系統，有些比較舊型的電腦他們使用非ASCII字元集（如EBCDIC字元集）。要解決這個問題，Xxencode是較為適切的編碼系統，它只使用到文數字字元集以及加減號字元。

 uuencode編碼範例 
 簡短的例子 
下面的表格顯示如何將Cat這三個ASCII字元編碼成uuencode的0V%T：

 原始字元 C a t 原始ASCII碼（十進位） 67 97 116 ASCII碼（二進位） 0 1 0 0 00 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這三個ASCII字元表示成uuencode的檔案形式：
 begin 644 cat.txt
 #0V%T
 `
 end

 長範例 
底下是引用自英文版的一段文字，將其存成test.txt，引用文字如下：

Each group of sixty output characters (corresponding to 45 input bytes) is output as a separate line preceded by an encoded character giving the number of encoded bytes on that line. For all lines except the last, this will be the character 'M' (ASCII code 77 = 32+45). If the input is not evenly divisible by 45, the last line will contain the remaining N output characters, preceded by the character whose code is 32 + the number of remaining input bytes. Finally, a line containing just a single space (or grave character) is output, followed by one line containing the string "end".

使用uuencode編碼後的檔案為：

 begin -666 test.txt
 M16%C:"!G<F]U<"!O9B!S:7AT>2!O=71P=70@8VAA<F%C=&5R<R`H8V]R<F5S
 M<&]N9&EN9R!T;R`T-2!I;G!U="!B>71E<RD@:7,@;W5T<'5T(&%S(&$@<V5P
 M87)A=&4@;&EN92!P<F5C961E9"!B>2!A;B!E;F-O9&5D(&-H87)A8W1E<B!G
 M:79I;F<@=&AE(&YU;6)E<B!O9B!E;F-O9&5D(&)Y=&5S(&]N('1H870@;&EN
 M92X@1F]R(&%L;"!L:6YE<R!E>&-E<'0@=&AE(&QA<W0L('1H:7,@=VEL;"!B
 M92!T:&4@8VAA<F%C=&5R("=-)R`H05-#24D@8V]D92`W-R`](#,R*S0U*2X@
 M268@=&AE(&EN<'5T(&ES(&YO="!E=F5N;'D@9&EV:7-I8FQE(&)Y(#0U+"!T
 M:&4@;&%S="!L:6YE('=I;&P@8V]N=&%I;B!T:&4@<F5M86EN:6YG($X@;W5T
 M<'5T(&-H87)A8W1E<G,L('!R96-E9&5D(&)Y('1H92!C:&%R86-T97(@=VAO
 M<V4@8V]D92!I<R`S,B`K('1H92!N=6UB97(@;V8@<F5M86EN:6YG(&EN<'5T
 M(&)Y=&5S+B!&:6YA;&QY+"!A(&QI;F4@8V]N=&%I;FEN9R!J=7-T(&$@<VEN
 M9VQE('-P86-E("AO<B!G<F%V92!C:&%R86-T97(I(&ES(&]U='!U="P@9F]L
 M;&]W960@8GD@;VYE(&QI;F4@8V]N=&%I;FEN9R!T:&4@<W1R:6YG(")E;F0B
 !+@``
 `
 end

 Uuencode對照表 
下面的表格顯示uuencode所使用到的ASCII字元集、6-bit二進位碼以及十進位的對照。由上面Cat的例子可以看出其第一個編碼為十進位的16，對應下面表格uuencode十進位表示欄位，可以查出其uuencode的輸出碼為0。

可列印的字元十進位ASCII值uuencode二進位表示uuencode十進位表示可列印的字元十進位ASCII值uuencode二進位表示uuencode十進位表示(space)32000 0000 @64100 00032!33000 0011 A65100 00133"34000 0102 B66100 01034#35000 0113 C67100 01135$36000 1004 D68100 10036%37000 1015 E69100 10137&38000 1106 F70100 11038'39000 1117 G71100 11139(40001 0008 H72101 00040)41001 0019 I73101 00141*42001 01010 J74101 01042+43001 01111 K75101 01143,44001 10012 L76101 10044-45001 10113 M77101 10145.46001 11014 N78101 11046/47001 11115 O79101 11147048010 00016 P80110 00048149010 00117 Q81110 00149250010 01018 R82110 01050351010 01119 S83110 01151452010 10020 T84110 10052553010 10121 U85110 10153654010 11022 V86110 11054755010 11123 W87110 11155856011 00024 X88111 00056957011 00125 Y89111 00157:58011 01026 Z90111 01058;59011 01127 [91111 01159<60011 10028 \92111 10060=61011 10129 ]93111 10161>62011 11030 ^94111 11062?63011 11131 _95111 11163 `96(1) 000 00064

 參見 
 Base64
 BinHex
 MIME
 yEnc

 參考資料 

 外部連結 
 UUDeview  - 適用於Unix/Windows/DOS等作業系統，使用Base64, BinHex, uuencode, xxencode, ...等方法編／解碼的開放源碼程式。
 在线uuencode编码与解码

Category:电子邮件
Category:Unix SUS2008实用工具
Category:Usenet
Category:字符编码
Category:文件格式