遇到了乱码的问题(转载)


 今天遇到一个乱码的问题,我从一个html页想.net后台提交表单,数据到后台就乱码,虽然乱码的问题以前也遇到过,不过每次都很郁闷,虽然最后也都解决了问题,但是很是不能很系统的了解关于编码的种种细节,想总结下:

首先说今天遇到的问题,在head里设置的html表单的编码方式是gb2312,那么在form里默认的数据编码方式便是gb2321,Form有一个不太常用的属性是accept-charset,他可以设定数据提交时的编码方式,关于accept-charset如下:

accept-charset 属性accept-charset 属性允许您指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据。 该属性的值是用引号包含字符集名称列表。如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待。 此属性的默认值是 "unknown",表示表单的字符集与包含表单的文档的字符集相同。

这是属性在IE6中是无效的(这是郁闷的根源啊),在firefox中可以正常使用。在网上找了个hack的方法,就是用js设置编码方式,如下:

<form action="addcompany.ashx"  method="post"  onsubmit="document.charset=''utf-8;"  >

当然可以不用这个属性,服务器端是什么编码方式,在html直接设置和服务器端相同就可以了。利用accept-charset可以向和本文档编码不同的服务器端提交表单,可以一次设置多个,如:

<form action="addcompany.ashx"  method="post"  accept- charset="utf-8,gb2321,..."  >

还好又学到了accept-charset的用法。

其次是曾遇到url编码的问题,url不经过编码,汉字是无法传递到服务器的,利用encodeURI(url)方法可以实现编码。

再次是曾使用htm文件做模板,生成静态页,html文件的编码方式是ANSI,.net下是utf-8,编码不一致导致乱码,解决办法是,用记事本打开html文件,另存为,选择正确的编码方式保存。

在js中使用escape()和unescape()对字符串进行编解码,

提示和注释

提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。

注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

 最后,在asp.net中遇到的乱码问题,这篇文章总结的不错

http://www.cnblogs.com/tohen/archive/2007/04/10/707330.html

好了,希望遇到乱码再也不郁闷了,无非是编码不统一的原故,只不过今天忘了试试别的浏览器,IE6太不标准了,呵呵,跨浏览器编程!!

转自:http://hongyin163.sh103.idcwind.net/post/11.html

posted @ 2008-10-22 21:54  OOLi  阅读(291)  评论(0编辑  收藏  举报