zl程序教程

您现在的位置是:首页 >  其它

当前栏目

从gb到utf-8

utf GB
2023-06-13 09:13:47 时间

现在不少中文网站的编码都在从gb2312向utf-8编码转化。其中出现了不少问题在这里总结一下:

前提:

保证所有的文件保存的时候都是utf-8编码的,而不是ansi

具体设置:如果使用的是文本编辑器,那么在保存文件的时候就有一个编码选择(图1)将其选择成UTF-8就可以了。

如果是使用的dreamweaver那么就麻烦一点。

使用dreamweaver编辑静态文件时,那么将文件的charset标签修改成utf-8:<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>改为<metahttp-equiv="Content-Type"content="text/html;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读文件
SetobjStream=Server.CreateObject("ADODB.Stream")
   WithobjStream
   .Open
   .Charset="utf-8"
   .Position=objStream.Size
   .LoadFromFileserver.mappath("sc.htm")
   wstr=.ReadText
   .Close
   EndWith
SetobjStream=Nothing
 
使用stream写文件SetobjStream=Server.CreateObject("ADODB.Stream")
   WithobjStream
   .Open
   .Charset="utf-8"
   .Position=objStream.Size
   .WriteText=wstr
   .SaveToFileserver.mappath("wz/sc_"&classid&".htm"),2 
   .Close
   EndWith
SetobjStream=Nothing

php篇

php与access连接:

在windows主机上使用php的com扩展可以连接access数据库,在建立ADODB.Connection的时候指定代码页参数为65001

<?php
$conn=newCOM("ADODB.Connection",NULL,65001)ordie("ADOconnectfailed!");
$rs=newCOM("ADODB.RecordSet")ordie("ADOrecordsetfail");$conn->open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=data.mdb");
$rs=$conn->Execute("select*fromdata");
whilenot$rs->EOF
echo$rs->Fields["title"]->value;
?>

php与mysql连接

与mysql数据库建立好连接后首先执行以下SQL查询:

<?php mysql_query("SETNAMES"utf8""); ?>

mysql手册 关于setnames的说明SETNAMES显示客户端发送的SQL语句中使用什么字符集。因此,SETNAMES"cp1251"语句告诉服务器“将来从这个客户端传来的信息采用字符集cp1251”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符集。)
SETNAMES"x"语句与这三个语句等价:

mysql>SETcharacter_set_client=x;
mysql>SETcharacter_set_results=x;
mysql>SETcharacter_set_connection=x;
将x设置为character_set_connection也就设置了collation_connection是x的默认校对规则。

使用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;DataSource=%s",realpath("2data.mdb"));
//$dsn=sprintf("Driver={MicrosoftAccessDriver(*.mdb)};Dbq=%s",realpath("data.mdb"));
$conn->Connect($dsn);