日期:2014-05-17  浏览次数:20780 次

[求助]utf-8页面接收URL中文参数错误的问题!
新建了一个utf-8文件格式的asp文件,声明和服务器端代码都是utf-8编码,文件也是utf-8编码。
1、现在发现一个问题,发现用url方式传值的话,然后用request( "参数名称 ")的方式来得到的值都是错误的,有时候是乱码,有时候少一个字?
解决办法我已找到,就是传值的时候用Server.URLEncode来编码一下就行了!
但我想问的是这是什么问题?为何会这样!不编码不行吗?
2、我在GOOGLE的页面参数中直接写中文也可以搜索到:http://www.google.com/search?q=湖北省,不会少也不会乱码,这又是为什么呢?      
雅虎的据说以前的有问题,现在也和Google一样,也可以正常访问:http://search.cn.yahoo.com/search?p=湖北省
3、又发现一个问题:直接在浏览器中输入http://localhost/test.asp?test=中文时打开一个utf-8的页面会出现获取test的值是乱码;而在utf-8页面中加一个a标签链接链到上述这个网址时则中文会正常显示出来!真是奇怪了!!!
这到底是为什么呢?请大家一块儿帮忙分析分析!


------解决方案--------------------
加一个这个试试
Response.Charset= "UTF-8 "
------解决方案--------------------
参考http://china.eceel.com/article/study_for_character_encoding_java.htm
------解决方案--------------------
当不指定编码的时候,该方法使用系统默认编码,这会导致软件运行结果得不确定。比如对于 "中文 ",当系统默认编码为 "gb2312 "时,结果是 "%4e%2d%65%87 ",而默认编码为 "UTF-8 ",结果却是 "%e4%b8%ad%e6%96%87 ",后续程序将难以处理。
------解决方案--------------------
用链接肯定不会出问题,因为链接点击之后,传递的是urlencode编码过的参数
------解决方案--------------------
<%@language= "vbscript " codepage=65001%>
<%
Response.Charset = "utf-8 "

'如果取Request( "*** "),那么就是Unicode编码的字符,而不是UTF-8
用Asc(Mid(Request( "*** "), 1, 1))取值永远是1
只有用AscW(Mid(Request( "*** "), 1, 1))才能取值
%>

用utf-8开发程序,业务逻辑层里最好不要用utf-8编码,转换成本地字符集再做处理,处理完后转换成utf-8再输出,Request对象是没有编码转换支持的

google的解码也不是万能的,看看这个连接
http://www.google.cn/search?q=%CA%B3%C6%B7
http://www.google.cn/search?q=食品

%CA%B3%C6%B7是[食品]的本地字符的URLEncode编码,GOOGLE就无法解码
这个问题我在下面这个贴子详细描述过,凡是未知编码的字符串,最后有个事先的编码约定,不然无法判断一个字符串到底是本地字符编码还是utf-8编码

http://community.csdn.net/Expert/topic/5165/5165270.xml?temp=.9811975