今天遇到一个乱码的问题,我从一个html页想.net后台提交表单,数据到后台就乱码,虽然乱码的问题以前也遇到过,不过每次都很郁闷,虽然最后也都解决了问题,但是很是不能很系统的了解关于编码的种种细节,想总结下:
首先说今天遇到的问题,在head里设置的html表单的编码方式是gb2312,那么在form里默认的数据编码方式便是gb2321,Form有一个不太常用的属性是accept-charset,他可以设定数据提交时的编码方式,关于accept-charset如下:
这是属性在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()对字符串进行编解码,
最后,在asp.net中遇到的乱码问题,这篇文章总结的不错
http://www.cnblogs.com/tohen/archive/2007/04/10/707330.html
好了,希望遇到乱码再也不郁闷了,无非是编码不统一的原故,只不过今天忘了试试别的浏览器,IE6太不标准了,呵呵,跨浏览器编程!!
转自:http://hongyin163.sh103.idcwind.net/post/11.html