現在不少中文網站的編碼都在從gb2312向utf-8編碼轉化。其中出現了不少問題在這裡總結一下:
前提:
保證所有的檔案儲存的時候都是utf-8編碼的,而不是ansi
具體設定:如果使用的是文字編輯器,那麼在儲存檔案的時候就有一個編碼選擇(圖1) 將其選擇成UTF-8就可以了。
如果是使用的dreamweaver那麼就麻煩一點。
使用dreamweaver編輯靜態檔案時,那麼將檔案的charset標籤修改成utf-8:
改為
然後選擇另存新檔這時候dream會將檔案儲存為utf-8編碼的
註:如果使用的是access資料庫那麼只需要以上兩步就可以了,access本身採用utf-8編碼。
asp篇
字碼頁設定:
asp檔案的第一行:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
改成:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
這也直接決定了asp 通過ado訪問資料庫採用的編碼。
註:如果使用的是access資料庫那麼只需要以上兩步就可以了,access本身採用utf-8編碼。
如果使用了模板程式
通常的模板程式,通過fso對象來讀寫檔案。但是這種方式沒法支援utf-8,需要改成stream對象來讀寫檔案,下面是幾行關鍵的代碼:
使用stram讀檔案
Set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Open
.Charset = "utf-8"
.Position = objStream.Size
.LoadFromFile server.mappath("sc.htm")
wstr = .ReadText
.Close
End With
Set objStream = Nothing
使用stream寫檔案
Set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Open
.Charset = "utf-8"
.Position = objStream.Size
.WriteText=wstr
.SaveToFile server.mappath("wz/sc_" & classid & ".htm"),2
.Close
End With
Set objStream = Nothing
php篇
php與access串連:
在windows主機上 使用php的com擴充可以串連access資料庫,在建立ADODB.Connection的時候 指定字碼頁參數為65001
$conn = new COM("ADODB.Connection",NULL,65001) or die("ADO connect failed!");
$rs = new COM("ADODB.RecordSet") or die("ADO recordset fail"); $conn->open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb");
$rs = $conn->Execute("select * from data");
while not $rs->EOF
echo $rs->Fields['title']->value;
?>
php 與mysql串連
與mysql資料庫建立好串連後首先執行以下SQL查詢:
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_connection也就設定了collation_connection是x的預設校對規則。
使用adodb類:
設定'charpage' 屬性為65001;
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);