每次出现乱码问题都要去网上找原因。fishili的写的很好很全。
这次凭记忆简单总结下,希望能记住:
出现乱码,首要问题是要看请求的编码和处理响应时候的编码是否一致。(可能描述有问题)
先看自己构建的网页的编码, 看网站配置文件里面的编码,是否一致。
再看发送请求时候检查url参数是否经过URIEncode。
自己大体理解:
当前显示页面,输入中文或者符号,这个时候页面有个编码一般都使用UTF-8
发送请求后,get,有些浏览器需要手动在js中进行编码。 EncodURI() 和EncodeURIComponent(),两者简单区别,第一个会转意 所有非(基本字符、Mark字符和保留字符),第二个是对保留字符同样做转义处理(:";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","),所以简而言之,如果请求内容中含有特殊字符要使用第二种,而且只能对这个内容进行转义,不能对整个url进行。他们对传入字符串进行按照UTF-8编码转化成为一个、两个或者三个字节的十六进制转义字符(%xx)(URI是统一方式标示资源的字符串);
到达服务器:服务器对获得的参数会进行解码(无需手动decode),然后程序对数据进行操作,中午的还是中午。(为什么无需decode这里是猜的)
服务器里面也有响应的方法:HttpUtility.UrlPathEncode、HttpUtility.UrlEncode、Server.UrlEncode,分别类似于 EncodURI() ,EncodeURIComponent(),。。。
响应的时候,保证编码一致既可。UTF-8,即输出的时候content-type/Content-Dispositino什么的头文件里面改写编码。
补充:
今天遇到另一种乱码,本地asp文件 ansi编码,html页面charset=utf-8,更新到香港服务器,网站显示页面中文乱码。
解决:将文本记事本另存为utf-8格式即可。测试本地文本文件默认ansi编码,中文系统打开实际上是gb2312编码,香港服务器英文系统,打开仍然是ansi编码,中文乱码。
另外问题,请求的编码和响应的编码具体是用的哪里的,默认情况下又是哪里的呢?以后留意来补充。