1:字元編碼是怎麼回事?
資訊是抽象的,而用來記錄資訊的資料是具體的。比如你腦子裡有個想法,這個想法就是個抽象的東西。雖然它得得確確是存在的,但如果你不把它表達出來,那它事實上等於沒有。怎麼表達呢?說話或寫字,可以用漢語、英語、日語。。。
在c#中,string就是資訊,抽像的。string本身是沒有編碼的。但string對應的byte陣列必需有編碼。這就是資訊-資料的特點。資訊是抽象的,而資料必需有資料格式。你在程式中有乙個string,你想把這個string輸出到檔案,怎麼辦呢?請看.net字串輸出函式:
byte encoding.getencoding(string charset).getbytes(string text)
text是資訊,charset可以把這個資訊儲存為不同格式的資料。
反過來:
string encoding.getencoding(string charset).getstring(byte data)
可以根據特定格式資料獲得資訊
所以:字元編碼就是string轉byte時所用的資料格式。"字元(string)的編碼"是個錯誤概念。"字元資料(byte)的編碼"才是正確的。
再回到,不同的儲存方式有不同的特點。jpg壓縮比高省空間,bmp質量最高,png各方面效能較為均衡而且支援透明色。string對應的不同編碼格式也各有優缺點。如果要表達漢字,一般情況下gb2312最高效。gbk比gb2312能表達更多漢字。而如果你需要表達多國語言,那麼需要採用unicode系列如utf-8。
2:網頁檔案
using system;
using system.collections.generic;
using system.windows.forms;
using system.io;
using system.io.compression;
using system.net;
using system.net.cache;
using system.text;
using system.text.regularexpressions;
namespace htmlshow
set}
/// /// 原始字元編碼
///
string originalcharset;
public string originalcharset
set}
string charset;
/// /// 字元編碼
///
public string charset
set}
string type;
/// /// 資源的mime型別
///
public string contenttype
}encodetype encode = encodetype.none;
/// /// 資料編碼
///
public encodetype encode
set}
/// /// 字串內容
///
public string content
else
else
else}}
}}
byte data;
/// /// 二進位制資料
///
public byte data
else
case encodetype.base64:
string ss = tobase64(this.data);
stringbuilder sb = new stringbuilder();
int start = 0;
while (start + 76 < ss.length)
if (start < ss.length - 1)
return system.text.encoding.default.getbytes(sb.tostring());
default:
return encoding.getencoding(charset).getbytes(content); ;}}
}public downloadfile(string url)
public bool download()
if (redirect > 0)
type = hwresp.contenttype;
regex reg = new regex("charset=(?[^\"\\s;]+)", regexoptions.ignorecase);
match m = reg.match(type);
if (m.success)
stream1 = decompress(hwresp);
long totaldownloadedbyte = 0;
byte by = new byte[1024];
int osize = stream1.read(by, 0, (int)by.length);
while (osize > 0)
data = temp.getbuffer();
return true;
}catch (exception)
finally
if (stream1 != null)
if (hwresp != null)
temp.close();}}
/// /// 糾正title標籤位於charset標誌之前的bug
///
///
private string adjustcharset(string text)
return input;
}/// /// 將byte轉換成base64編碼文字
///
/// byte
///
public static string tobase64(byte binbuffer)
/// gzip解壓函式
注:encodetype是對資料進行再編碼,為了便於網路傳輸,和今天討論主題無關。
最後:較真地說:c#中的string其實也是有編碼的,因為絕對抽像的東西是不存在的。就像你心裡的話,在沒由嘴裡說出和寫到紙上前,它是由你的腦細胞、腦電波構成的。。。。
c#中string雖然對你抽像了,但visualstudio還是要儲存它為具體資料格式的。c#中string採用的是unicode(utf-16)編碼。string的編碼僅對visualstudio有用,對使用者(程式設計師)透明。
python requests儲存網頁檔案引數總結
一 r requests.get url,headers headers,stream true 官方文件 如果你在請求中把 stream 設為 true,requests 無法將連線釋放回連線池,除非你 消耗了所有的資料,或者呼叫了 response.close。這樣會帶來連線效率低下的問題。如果...
網頁檔案命名規範
資訊反饋 feedback 產品 product 所有單英文單詞檔名都必須為小寫,如檔名為兩個或兩個以上單詞組成,檔名稱第二個單詞起的第乙個字母要大寫 滑鼠感應效果命名規範為 名 on off 所有檔名字母間連線都為下劃線 例如 menu1 on.gifmenu1 off.gif 1.js的命名原則...
網頁中遇到的網頁檔案編碼問題的解決辦法
在處理網頁原始檔的時候,經常會遇到網頁原始檔編碼的問題,這些問題在解析標籤的時候倒是沒什麼問題,但是就是在儲存的時候會有亂碼發生。這個資料庫,作業系統的預設編碼有關係,當然罪魁禍首依然是千變萬化的網頁原始檔造成的。解決這個問題通常的做法是無論是什麼編碼格式,一律轉化為utf 8,但是事與願違,轉化為...