自己動手豐衣足食-搞定網頁亂碼 (轉)
朋友發過來的信件,全都是
Hi, Sorry for writing back late.
資料丟了就丟了吧,以後小心點就ą
59;了,你應該把那些重要的東東刻下
這個樣子,怎麼辦?讓他重寫,估計誰也沒有這個耐心,只好自己捉摸一下了。
判定問題:看這段文字可以猜出每個xxxx;都是一個字元的某種編碼,在上搜了一把,果然發現這些都是unicode碼。
分析問題:unicode無非就是2個位元組一個字元,所以只要將這些unicode碼當作16位數存在一個寬字元快取中,顯示就行了。
還要考慮一般顯示字元都要轉換成mutibyte方式,所以還要用個:WCharToMultiByte。
實現: code + de --> ok! 朋友的長信被“”了。
現在和大家分享快樂(沒有,不好意思了):
#define _UNICODE // IMPORTANT!!
// convert from one wide char to mutibyte char[]
char* Convert( wchar_t wc, char* lpDest )
{
// construct wchar string
wchar_t strScr[2];
strScr[0] = wc;
strScr[1] = L'';
// lpDest must a char string with 3 byte, and lpDest[2] == ''
assert( 0 == lpDest[2] );
int iRet = WideCharToMultiByte(
CP_ACP, // codepage
0, // dwFlags
strScr, // lpWideCharStr
-1, // cchWideChar
lpDest, // lpMutiByteStr
3, // cchMutiByte
NULL, // lpDefaultChar
NULL // lpUsedDefaultChar
);
int iError = GetLastError();
switch(iError)
{
case ERROR_INSUFFICIENT_BUFFER:
break;
case ERROR_INVALID_FLAGS:
break;
case ERROR_INVALID_PARAMETER:
break;
default:
return lpDest;
}
return NULL;
}
// from unicode string to normal string
CString ParseConvert( CString& szSrc )
{
CString szDest = "";
int cLength = szSrc.GetLength();
char cDestChar[] = "??";
for( int i=0 ; i < cLength; i ++ )
{
if( szSrc[i] == '&' && szSrc[i+1] == '#' ) // a unicode char start
{
int iCount = 0;
char szWC[10] ;
memset( szWC, 0, 10 );
i += 2;
while( szSrc[i] != ';' )
{
szWC[iCount] = szSrc[i];
iCount++;
i++;
}
int wc = 0;
sscanf( szWC, "%d", &wc );
szDest += Convert( wc, cDestChar );
}
else
{
szDest += szSrc[i];
}
}
return szDest;
}
void CDecodeDlg::OnButton1()
{
CFileDialog dlg(TRUE);
CString szFileName;
if( dlg.odal() == IDOK )
{
szFileName = dlg.GetPathName();
}
else
return;
CStdioFile file;
file.Open( szFileName, CFile::modeRead | CFile::typeText );
CString szBuf, szLine;
while( file.ReadString( szLine ) )
{
szBuf += szLine;
szBuf += "n";
}
file.Close();
// try it
MessageBox( ParseConvert( szBuf ) );
}
to:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004596/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【IOS】自己動手豐衣足食--圖片篇iOS
- 【IOS】自己動手豐衣足食-圖示篇ICONiOS
- 自己動手,豐衣足食:從零開始寫個 IDEA 外掛,要啥功能就做啥Idea
- 自己試著隨手亂編的程式碼,好亂
- 公司網站首頁突然亂碼網站
- 不用程式碼,2小時搞定自己的網站網站
- 找人做網站不如自己動手網站
- 手動自己寫了一個波場(Tron)本地網頁版錢包網頁
- 不用自己動手排版,一鍵就能搞定的海報設計工具!
- java抓取網頁的亂碼問題(通用)Java網頁
- 為什麼網頁出現亂碼現象網頁
- 求教:網頁每隔一定字元出現亂碼。網頁字元
- 自己動手寫PromisePromise
- 給自己的程式增加網頁瀏覽功能(續) (轉)網頁
- js實現手機網頁滑動JS網頁
- 網頁左右上下浮動廣告程式碼製作(轉)網頁
- 自己動手開發網路伺服器(一)伺服器
- requests.get()爬去中文網頁亂碼解決方法網頁
- 自己動手做一個迷你 Linux 系統(轉)Linux
- 自動重新整理網頁(轉)網頁
- 自己動手編譯OpenJDK編譯JDK
- 自己動手實現OkHttpHTTP
- 自己動手實現神經網路分詞模型神經網路分詞模型
- Python使用request包請求網頁亂碼解決方法Python網頁
- JSP網頁中下載xls檔案亂碼怎麼辦?JS網頁
- Redhat 瀏覽網頁有亂碼 安裝中文字型Redhat網頁
- 網頁點選後退再前進出現亂碼原因網頁
- 解決GAT首頁亂碼Bug
- 自己動手做QQ木馬----郵件傳送篇 (轉)
- 玩轉PHP動態網頁設計PHP網頁
- 走進Vue-cli原始碼,自己動手搭建前端腳手架工具Vue原始碼前端
- [轉]讀取webBrowser中網頁程式碼Web網頁
- PbootCMS後臺頁面顯示亂碼boot
- 自己動手寫一個 SimpleVueVue
- 自己動手編譯OpenSSL庫編譯
- 自己動手寫 PHP 框架(一)PHP框架
- 自己動手刪掉winRAR廣告
- 自己如何製作一個網頁網頁