VB下中文URL编码问题的解决
2008-05-20 13:02
120 查看
因为编码涉及的内容既多且烦,特别是vb的编码,又有诸多限制,所以在解决URL中文编码的时候走了很久的弯路。
问题:
我的VB客户端需要向web服务器发送数据,在服务器端更新到数据库。但发送的数据中,肯定出现中文。但在服务器端,用request得到的是乱码。
尝试1:
知道vb中编码都是unicode,试图修改页面中的代码页,如:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
无效,因为发送的是URL,是在页面打开之前的。这个选择对URL的解析没有影响。
尝试2:
找资料,大多是说要将URL编码改为UTF-8编码,因为url接收的都是utf-8,但似乎google接收的是unicode,不管了,下载编码器。如:
http://www.cnblogs.com/unruledboy/archive/2004/07/18/25286.html
但总有问题,比如有些字在服务器端无法识别,如“台”被解析成“口”
尝试3:
在客户端没有办法,就想想服务器端的主意,因为是用asp.net,功能毕竟全面一些,一下就找到
string query = this.Request.Url.Query;
System.Collections.Specialized.NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(query, System.Text.Encoding.GetEncoding("GBK"));
于是,客户端不进行任何转换,服务器端用能够得到的代码页进行逐个判断:
foreach (EncodingInfo ei in Encoding.GetEncodings())
{
Encoding e2 = ei.GetEncoding();
if(System.Web.HttpUtility.ParseQueryString(query, e2)["F1"]!=null)
s += (e2.EncodingName) + System.Web.HttpUtility.ParseQueryString(query, e2)["F1"].ToString() + "------";
}
但结果很失败,没有任何一种代码页能够得到和原来一样的中文。
![](http://images.cnblogs.com/cnblogs_com/jetz/code2.jpg)
尝试4:用adodb.stream,这个东西我也不熟,但貌似可以在客户端进行unicode和utf-8的转换,找到一个台湾的页面,提到转换方法:
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=66001
但我居然无法把它套用到简体环境,我试了几种charset,都不行。
尝试5:只能耐心研究vb的字符串的格式了,找到一篇比较好的文章,看样子又是台湾作者写的!
http://blog.csdn.net/qunluo/archive/2004/07/22/48682.aspx
我的理解是:
vb中的字符串都是unicode编码,即:任何一个字符都是用双字节表示。
LenB("12魏家台")=8,说明占用8个字节
用strConv(str,vbfromunicode)可以将串转换为ansi的,即gb2312或者gbk,特点是,中文双字节,英文单字节。
得到的ansi仍然是字符串,不过在vb下显示是乱码,因为vb会按照unicode的编码去理解它的。如,这时“12”只有2个字节,但vb会认为这时一个unicode字符。
为了分析这个ansi串,需要将其转换为字节数组。很简单
dim byt() as byte
byt=sAnsi
为了比较,我在baidu里百度了一下"12魏家台",得到了其编码是“12%CE%BA%BC%D2%CC%A8”,经验证,每2个16进制数,就是相应的中文的ansi编码。
![](http://images.cnblogs.com/cnblogs_com/jetz/code.jpg)
终于得到一个结论/办法:把中文转换为ansi,编码为文本串,发送到服务器。在服务器端用GB2312或者GBK代码页解析。
我没有用大量中文进行测试,只选择了“镕”字测试了一下,结果,可以被服务器正确的识别。
感受:
vb的确不复当年之勇了,找资料感觉越来越困难了。
问题:
我的VB客户端需要向web服务器发送数据,在服务器端更新到数据库。但发送的数据中,肯定出现中文。但在服务器端,用request得到的是乱码。
尝试1:
知道vb中编码都是unicode,试图修改页面中的代码页,如:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
无效,因为发送的是URL,是在页面打开之前的。这个选择对URL的解析没有影响。
尝试2:
找资料,大多是说要将URL编码改为UTF-8编码,因为url接收的都是utf-8,但似乎google接收的是unicode,不管了,下载编码器。如:
http://www.cnblogs.com/unruledboy/archive/2004/07/18/25286.html
但总有问题,比如有些字在服务器端无法识别,如“台”被解析成“口”
尝试3:
在客户端没有办法,就想想服务器端的主意,因为是用asp.net,功能毕竟全面一些,一下就找到
string query = this.Request.Url.Query;
System.Collections.Specialized.NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(query, System.Text.Encoding.GetEncoding("GBK"));
于是,客户端不进行任何转换,服务器端用能够得到的代码页进行逐个判断:
foreach (EncodingInfo ei in Encoding.GetEncodings())
{
Encoding e2 = ei.GetEncoding();
if(System.Web.HttpUtility.ParseQueryString(query, e2)["F1"]!=null)
s += (e2.EncodingName) + System.Web.HttpUtility.ParseQueryString(query, e2)["F1"].ToString() + "------";
}
但结果很失败,没有任何一种代码页能够得到和原来一样的中文。
![](http://images.cnblogs.com/cnblogs_com/jetz/code2.jpg)
尝试4:用adodb.stream,这个东西我也不熟,但貌似可以在客户端进行unicode和utf-8的转换,找到一个台湾的页面,提到转换方法:
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=66001
但我居然无法把它套用到简体环境,我试了几种charset,都不行。
尝试5:只能耐心研究vb的字符串的格式了,找到一篇比较好的文章,看样子又是台湾作者写的!
http://blog.csdn.net/qunluo/archive/2004/07/22/48682.aspx
我的理解是:
vb中的字符串都是unicode编码,即:任何一个字符都是用双字节表示。
LenB("12魏家台")=8,说明占用8个字节
用strConv(str,vbfromunicode)可以将串转换为ansi的,即gb2312或者gbk,特点是,中文双字节,英文单字节。
得到的ansi仍然是字符串,不过在vb下显示是乱码,因为vb会按照unicode的编码去理解它的。如,这时“12”只有2个字节,但vb会认为这时一个unicode字符。
为了分析这个ansi串,需要将其转换为字节数组。很简单
dim byt() as byte
byt=sAnsi
为了比较,我在baidu里百度了一下"12魏家台",得到了其编码是“12%CE%BA%BC%D2%CC%A8”,经验证,每2个16进制数,就是相应的中文的ansi编码。
![](http://images.cnblogs.com/cnblogs_com/jetz/code.jpg)
终于得到一个结论/办法:把中文转换为ansi,编码为文本串,发送到服务器。在服务器端用GB2312或者GBK代码页解析。
我没有用大量中文进行测试,只选择了“镕”字测试了一下,结果,可以被服务器正确的识别。
感受:
vb的确不复当年之勇了,找资料感觉越来越困难了。
相关文章推荐
- lash as2/as3 向后台传参数url编码 urlencode(解决中文传参乱码问题)
- vb.net中使用GetPrivateProfileString访问INI文件,解决中文路径问题
- vb.net从DataGridView复制到Excel.代码实现,解决中文乱码问题 (转载+亲自实践)
- JSP使用URL编码传递中文参数问题的解决
- vb.net中使用GetPrivateProfileString访问INI文件,解决中文路径问题
- url中文乱码问题最好的解决办法-URL编码与两次encodeURI
- 一劳永逸解决Mac/Ubuntu下VLC播放中文字幕乱码问题
- PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)
- Weblogic Server中如何解决中文显示乱码问题
- 解决Oracle 查询条件带中文 出错问题
- Mac下的mysql+hibernate配置下中文问题的解决
- 解决larave-dompdf中文字体显示问题
- java 中乱码或者中文问题的解决
- 如何解决J2ME中文的乱码问题
- KXMl中解决中文乱码问题
- pdfmake实现中文支持,解决中文乱码问题
- Struts + Spring + Hibernate + Mysql中文问题解决
- eclipse提交subversion+apache的中文路径问题解决过程
- 解决:FreeChart图形中文乱码问题
- 给同事解决了一下UTF-8中文传值的问题