亂碼演算法大全(一)Uuencode (轉)
相信上過網的朋友們都遇見過“亂碼”,也就是在瀏覽網頁或看E時出現的不能辨認的字元。以前也有許多的文章介紹過“亂碼”,不過他們的文章只是講怎樣辨別和怎樣用工具解碼,並沒有詳細介紹各種編碼的演算法的實現,本文將對網際網路上最常用的幾種編碼的編碼和解碼演算法作以詳細的闡述。希望對想了解“亂碼”演算法或想在自己中實現這些功能朋友們有一些參考價值。本文的源程式用C語言寫成,形式為,可直接使用。:namespace prefix = o ns = "urn:schemas--com::office" />
Uuencode:
Uuencode 是將二進位制以文字檔案方式進行編碼表示、以利於基於文字傳輸環境中進行二進位制檔案的傳輸/的編碼方法之一, 在/二進位制新聞組中使用頻率比較高,經常用於 Attach 二進位制檔案。
這種編碼的特徵是:每一行開頭用“M”標誌。下面是我做的一個測試用的檔案mogao.txt,編碼為Uuencode:
begin 644 mogao.txt
M"0D)("`@(*&VPM+"ZOCMZBTBKH;
MU]6^HZAT96QN970Z+RR,#(N,3$R+C(P+C$S,CHR,Z.ILG4L:&0H)("`@
M("`@Q*JXWCMO/ZYI-?WRM*CN='`Z+R]M;V=A;RYB96YT:75N+FYE=`T*
M"0D)16UA:6QT;SIM;V=A;T`S-S$N;F5T#0H)("`@*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ("`@("`@("`@("`@("`@
M#0H)("`@*B"S_
MN'TS(J#0H)("`@*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
,*BHJ*BHJ*BHJ*BHJ
`
end
你可以把它單獨存成一個檔案:mogao.uue,然後用開啟,解壓即得mogao.txt。
Uuencode的演算法很簡單,編碼時它將3個字元順序放入一個 24 位的緩衝區,缺字元的地方補零,然後將緩衝區截斷成為 4 個部分,高位在先,每個部分 6 位,用下面的64個字元重新表示:
"`!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_"
在檔案的開頭有“begin xxx 被編碼的檔名”,在檔案的結尾有“end”,用來標誌Uue檔案的開始和結束。編碼時,每次讀取原始檔的45個字元,不足45個的用“NULL”補足為3的整數倍(如:23補為24),然後輸入目標檔案一個ASCII為:“32+實際讀取的字元數”的字元作為每一行的開始。讀取的字元編碼後輸入目標檔案,再輸入一個“換行符”。如果原始檔被編碼完了,那麼輸入“`(ASCII為96)”和一個“換行符”表示編碼結束。
解碼時它將4個字元分別轉換為4個6位字元後,擷取有用的後六位放入一個 24 位的緩衝區,即得3個二進位制程式碼。
下面我給出Uuencode編碼和解碼的C語言描述:
/*Uuencode編碼*/
void Uue(unsigned char chasc[3],unsigned char chuue[4])
/*
chasc:未編碼的二進位制程式碼
chuue:編碼過的Uue程式碼
*/
{int i,k=2;
unsigned char t=NULL;
for(i=0;i<3;i++)
{*(chuue+i)=*(chasc+i)>>k;
*(chuue+i)|=t;
if(*(chuue+i)==NULL) *(chuue+i)+=96;
else *(chuue+i)+=32;
t=*(chasc+i)<
t>>=2;
k+=2;
}
*(chuue+3)=*(chasc+2)&63;
if(*(chuue+3)==NULL) *(chuue+3)+=96;
else *(chuue+3)+=32;
}
/*Uuencode解碼*/
void unUue(unsigned char chuue[4],unsigned char chasc[3])
/*
chuue:未解碼的Uue程式碼
chasc:解碼過的二進位制程式碼
*/
{int i,k=2;
unsigned char t=NULL;
if(*chuue==96) *chuue=NULL;
else *chuue-=32;
for(i=0;i<3;i++)
{*(chasc+i)=*(chuue+i)< k+=2; if(*(chuue+i+1)==96) *(chuue+i+1)=NULL; else *(chuue+i+1)-=32; t=*(chuue+i+1)>>8-k; *(chasc+i)|=t; } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1006055/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編碼轉換統一防止亂碼
- SpringMVC的亂碼與時間轉換SpringMVC
- PHP 每日一函式 — 字串函式 convert_uuencode () & convert_uudecode ()PHP函式字串
- response亂碼和request亂碼
- 【轉】iOS官方Saple大全iOS
- qt亂碼QT
- 上傳Text文件並轉換為PDF(解決亂碼)
- 網站爬取時出現亂碼-強行轉碼第二招網站
- 《程式碼大全》程式碼生成
- PHP判斷一個字串是否包含亂碼PHP字串
- gitk中文亂碼Git
- windows sqlplus亂碼WindowsSQL
- activity影象亂碼
- activity影像亂碼
- hive 中文亂碼Hive
- plsql中文亂碼SQL
- 讀完《程式碼大全》
- 直播原始碼功能大全原始碼
- 讀《程式碼大全》有感
- DOS命令中文亂碼一行命令解決
- flashfxp 亂碼,2種辦法解決flashfxp 亂碼問題
- Flutter元件大全(一)Flutter元件
- qt5亂碼QT
- confluence亂碼問題
- java web 中文亂碼JavaWeb
- Confluence亂碼解決
- 可能是亂碼
- C# 解決httplistener querystring 中文亂碼、返回json中文格式亂碼C#HTTPJSON
- 【日誌亂碼】解決Tomcat啟動控制檯亂碼問題Tomcat
- 程式碼大全回顧篇...
- HarmonyOS原始碼獲取大全原始碼
- Android 程式碼規範大全Android
- C++中string轉換為char*型別返回後亂碼問題C++型別
- Oracle:sqlplus查詢出的中文是亂碼問題的解決(轉)OracleSQL
- Spring MVC3返回JSON資料中文亂碼問題解決(轉)SpringMVCJSON
- mysql亂碼?一勞永逸修改mysql字符集!MySql
- 總結下js排序演算法和亂序演算法JS排序演算法
- 【轉】Linux常用命令大全(非常全!!!)Linux
- Python玩轉PDF各種騷操作大全!Python