現在不少中文網站的編碼都在從gb2312轉換成utf-8編碼。其中出現了不少問題在這裡總結一下:
保證所有的文件保存的時候都是utf-8編碼的,而不是ansi
具體設定:如果使用的是文字編輯器,那麼在儲存檔案的時候就有一個編碼選擇(圖1) 將其選擇成UTF-8就可以了。
如果是使用的dreamweaver那就麻煩一點。
使用dreamweaver編輯靜態檔案時,那麼將檔案的charset標籤修改成utf-8: <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
改為 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
然後選擇另存為這時候dream會將檔案儲存為utf-8編碼的
註:如果使用的是access資料庫那麼只需要以上兩步驟就可以了,access本身採用utf-8編碼。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
改成: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
這也直接決定了asp 透過ado存取資料庫所採用的編碼。 Set objStream = Server.CreateObject(" ADODB.Stream") <code>Set objStream = Server.CreateObject("ADODB.Stream") <br> With objStream <br> .Open <br> .Charset = "utf-8" <br> .Position = objStream.Size <br> .LoadFromFile server.mappath("sc.htm")<br> wstr = .ReadText<br> .Close <br> End With <br>Set objStream = Nothing<br>
With objStream Set objStream = Server.CreateObject("ADODB.Stream") <br> With objStream <br> .Open <br> .Charset = "utf-8" <br> .Position = objStream.Size <br> .WriteText=wstr <br> .SaveToFile server.mappath("wz/sc_" & classid & ".htm"),2 <br> .Close <br> End With <br>Set objStream = Nothing
.Open wstr = .ReadText
.Close<?php<BR>$conn = new COM("ADODB.Connection",NULL,65001) or die("ADO connect failed!");<BR>$rs = new COM("ADODB.RecordSet") or die("ADO recordset fail"); $conn->open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb"); <br>$rs = $conn->Execute("select * from data");<br>while not $rs->EOF<br>echo $rs->Fields['title']->value;<br>?>
End With Set objStream = Nothing
使用stream寫入檔案Set objStream = Nothing
php篇
php與access連接:
在windows主機上使用php的com擴充功能可以連接access資料庫,在建立ADODB.Connection的時候指定代碼頁參數為65001<?php <BR>$conn = new COM("ADODB .Connection",NULL,65001) or die("ADO connect failed!");<br>$rs = new COM("ADODB.RecordSet") or die("ADO recordset fail"); $conn->open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb");
echo $rs->Fields['title']->value;
?>與mysql資料庫建立好連線後先執行以下SQL查詢:
<?php<BR>require_once('adodb/adodb.inc.php'); <BR>$conn =& ADONewConnection('ado_access'); <BR>$conn->charPage ='65001';<br>//$conn->charPage = 65001;<br>//$conn->debug = true;<br>$dsn = sprintf("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= %s",realpath('2data.mdb'));<br>// $dsn = sprintf("Driver={Microsoft Access Driver (*.mdb)};Dbq=%s",realpath("data.mdb"));<br>$conn->Connect($dsn);
mysql手冊 關於set names 的說明 SET NAMES顯示客戶端傳送的SQL語句中使用什麼字元集。因此,SET NAMES 'cp1251'語句告訴伺服器「將來從這個客戶端傳來的資訊採用字元集cp1251」。它還為伺服器發送回客戶端的結果指定了字元集。 (例如,如果你使用一個SELECT語句,它表示列值使用了什麼字元集。)SET NAMES 'x'語句與這三個語句等價:
mysql> SET character_set_client = x;mysql> SET character_set_results = x;mysql> SET character_set_connection = x;將x指定為character_set_nectionacter_set_nection-conectioner_set_conectioner_set了nectionacter_set_nection。
使用adodb類:
設定'charpage' 屬性為65001;<?php <🎜>require_once('adodb/adodb.inc.php'); $conn =& ADONewConnection('ado_access'); $conn->charPage ='65001';//$conn->charPage = 65001;//$conn->debug = true;$dsn = sprintf("Provider= Microsoft.Jet.OLEDB.4.0;Data Source= %s",realpath('2data.mdb'));// $dsn = sprintf("Driver={Microsoft Access Driver (*.mdb)};Dbq =%s",realpath("data.mdb"));$conn->Connect($dsn);