网店  商城  街招  黄页  地图  诗歌  友链  交友
账号密码 注册
  新圩网 >> 新圩论坛 >> 百科聚焦 >> 电脑窍门 >> 我要发贴
普通主题 
查看:1246 | 回复:0   【  】【打印】 【前贴】【后贴
伯虎2015-10-12 08:17:48


主题:26
回复:53
积分:105

发私信
 

 

在使用asp进行数据库操作过程中,相信很多同学都遇到数据乱码问题。ASP数据乱码主要表现为以下几种情形:第一,非中文数据可以正常存入数据库,中文数据存入数据库后出现了乱码;第二,数据库中的英文数据可以正确显示在页面中,数据库中的中文数据在页面显示时出现了乱码;第三,数据库中的数据(含中文)在页面显示时正确,但页面本身所包含的中文却出现乱码。

上述问题的出现,与页面文件的存储编码格式有关。下面简单介绍几种常用的字符编码。

一、ANSI字符集中的ASCII编码

最初,Internet上只有一种字符集,即ANSI的ASCII字符集(American Standard Code for Information Interchange,美国信息交换标准码),它使用 7 bits 来表示一个字符,总共表示128个字符,后来IBM公司在此基础上进行了扩展,用 8 bits 来表示一个字符,总共可以表示256个字符,它充分利用了一个字节所能表达的最大信息。

通过 ANSI 字符集派生出许多兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。

 

二、Unicode字符编码

由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符编码(它是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案,Unicode是一个很大的集合,现在的规模可以容纳100多万个符号)。

Unicode是编码标准,并没有规定字符的存储方式。UTF-8、UTF-16、UTF-32都是将Unicode标准中的码位转换到具体存储数据的方案。

Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号 呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

三、UTF-8存储编码方式

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1、对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2、对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

四、ASP存储数据乱码的解决方案

之所以会出版数据乱码是因为页面编码的混乱所造成的。

1、如果页面保存时的存储编码设置为UTF-8,则必须:

(1)在网页头部也指定UTF-8编码格式,让浏览器使用这种编码对页面文档进行解析

<meta http-equiv="Content-Type" Content="text/html; Charset=UTF-8">

(2)如果是ASP页面,则必须指定数据传递时使用的编码也是UTF-8(下面代码必须放在ASP页面的第一行)

<%@Language="VBScript" CodePage="65001"%>

否则的话,通过该页面所提供的表单数据,存入数据库时可能会出现乱码。

2、如果页面保存时的存储编码设置为ANSI,则必须:

(1)在网页头部也指定GB2312编码格式,让浏览器使用这种编码对页面文档进行解析

<meta http-equiv="Content-Type" Content="text/html; Charset=GB2312">

(2)如果是ASP页面,则必须指定数据传递时使用的编码也是GB2312(下面代码必须放在ASP页面的第一行)

<%@Language="VBScript" CodePage="936"%>

否则的话,通过该页面所提供的表单数据,存入数据库时可能会出现乱码。

五、案例分析

l 用户反馈信息表单提交页面:ly.htm

l 将用户反馈信息表单数据存入数据库页面:savely.asp

l 显示数据库用户反馈信息

1、ly.htm页面的存储编码为ANSI,但在ly.htm页面头部定义的字符集为 utf-8,导致表单提交的数据存入数据库时出现乱码。

(1)ly.htm的存储编码格式为UTF-8

 

(2)ly.htm网页头部定义的字符编码为GB2312

 

(3)填写表单数据

 

(4)数据存入数据库出现了乱码

 

(5)解决方案:

l 将ly.htm页面的存储编码设置为 utf-8编码,同时在网页的头部定义网页的编码为 utf-8,即可解决问题。

l 将ly.htm页面的存储编码设置为 ansi 编码,同时在网页的头部定义网页的编码为 gb2312,也可解决问题。

2、如果ly.htm页面的编码设置没有问题,但如果 savely.asp页面的编码出现问题,同样会使数据存入数据库出现乱码。

(1)savely.asp页面的存储编码设置为utf-8,页面头部定义的编码为 utf-8,数据传递使用的编码也是 utf-8(<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>)。

(2)savely.asp页面的存储编码设置为ansi,页面头部定义的编码为 gb2312,数据传递使用的编码也是 gb2312(<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>)。

总结:

在使用ASP向数据库存入数据时,要确保页面文件的存储编码、页面头部定义的编码和数据传递所使用的编码一致,否则,数据存入数据库可能出现乱码。

 


 
      回复主贴
您需要登录后才能参与回复


Copyright © 2010-2014 www.537406.com 桂ICP备14003809号 www.jtdx.cn All Right Reserved
新圩网友交流聊天QQ总群 8287305 新圩交友娱乐QQ总群
 
本站是严谨而开放的信息平台,其内容为会员自行收集发布,如果您认为有关内容不适宜在本站展示,或者展示得不正确,请及时通知管理员删除或修改