字元編碼和網頁檔案

2021-06-06 21:19:27 字數 3711 閱讀 1333

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,但是事與願違,轉化為...