当前页面位置: » 丰搜网 » 文档中心 » 详细内容
关于手机post发送中文字符的测试
本文章源地址:http://www.itican.net/lmy0083/?cat=3
最近搞一个wap项目,发现有些手机用post方式提交中文字符的编码有些奇怪,我的环境是gb18030,支持gbk/gb2312。我开发测试opera7.60。开发语言jsp/java。
据我所知,java默认传输的字符集是8859_1(单字节字符集),手机上大部分是utf-8,少部分是gb2312;
关于这些字符集请参考http://www.itican.net/lmy0083/?page_id=88
我主要拿”人”这个汉字测试,
人
gbk/gb2312(hex) c8 cb
utf-8(hex) e4 ba ba
unicode 人;
我开发测试以opera7.60 这个浏览器,比较方便,当然,开发都是按这个浏览器支持的开发的,比如我把opera的字符集设为utf-8,所有post的中文字符就会以8859_1 默认的字符集发送(这是单字节字符集,不可能包含中文字符的,中文字符都是双字节,utf-8为3字节)但是奇怪的是,接收必须
string spost = new string(request.getparameter(”input_name”).getbytes(”8859_1″),”utf-8″);
否则不能满足我应用,我不能直接拿
request.getparameter(”input_name”)
来用,当然也不能写成
string spost = new string(request.getparameter(”input_name”).getbytes(”8859_1″),”其他字符集”);
这样开发,一些手机没问题,可以支持,比如nokia的6681,但是实际测试发现,有些手机比如n800,nokia6670,输入中文以这样的方式接收,将会接收到乱码;
于是我拿一些浏览器/模拟器/手机做测试,来看我到底接收到的是那种编码;
测试程序(接收部分,发送部分任意写个input,name为”input_name”):
- string spost= request.getparameter("input_name");
- if(spost== null spost.length()==0){spost= "0";}
-
- string gb2312_to_utf_8 = new string(spost.getbytes("gb2312"),"utf-8");
- string gb2312_to_gbk = new string(spost.getbytes("gb2312"),"gbk");
- string gb2312_to_8859_1 = new string(spost.getbytes("gb2312"),"8859_1");
-
- string gbk_to_utf_8 = new string(spost.getbytes("gbk"),"utf-8");
- string gbk_to_gb2312 = new string(spost.getbytes("gbk"),"gb2312");
- string gbk_to_8859_1 = new string(spost.getbytes("gbk"),"8859_1");
-
- string iso_8859_1_to_utf_8 = new string(spost.getbytes("8859_1"),"utf-8");
- string iso_8859_1_to_gb2312 = new string(spost.getbytes("8859_1"),"gb2312");
- string iso_8859_1_to_gbk = new string(spost.getbytes("8859_1"),"gbk");
-
- string utf_8_to_8859_1 = new string(spost.getbytes("utf-8"),"8859_1");
- string utf_8_to_gb2312 = new string(spost.getbytes("utf-8"),"gb2312");
- string utf_8_to_gbk = new string(spost.getbytes("utf-8"),"gbk");
-
-
- system.out.println("<wap test>*********************************************************");
- system.out.println("<wap test>ren");
- system.out.println("<wap test> utf_8 " + "e4baba" + java.net.urlencoder.encode(spost,"utf-8"));
- system.out.println("<wap test> gbk " + "c8cb " + java.net.urlencoder.encode(spost,"gbk"));
- system.out.println("<wap test> gb2312 " + "c8cb " + java.net.urlencoder.encode(spost,"gb2312"));
- system.out.println("<wap test> 8859_1 " + " " + java.net.urlencoder.encode(spost,"8859_1"));
-
- system.out.println("<wap test>gb2312 to utf_8 " + "e4baba" + java.net.urlencoder.encode(gb2312_to_utf_8,"utf-8"));
- system.out.println("<wap test>gb2312 to gbk " + "c8cb " + java.net.urlencoder.encode(gb2312_to_gbk,"gbk"));
- system.out.println("<wap test>gb2312 to 8859_1 " + "c8cb " + java.net.urlencoder.encode(gb2312_to_8859_1,"8859_1"));
-
- system.out.println("<wap test>gbk to utf_8 " + "e4baba" + java.net.urlencoder.encode(gbk_to_utf_8,"utf-8"));
- system.out.println("<wap test>gbk to gb2312 " + "c8cb " + java.net.urlencoder.encode(gbk_to_gb2312,"gb2312"));
- system.out.println("<wap test>gbk to 8859_1 " + "c8cb " + java.net.urlencoder.encode(gbk_to_8859_1,"8859_1"));
-
- system.out.println("<wap test>8859_1 to utf_8 " + "e4baba" + java.net.urlencoder.encode(iso_8859_1_to_utf_8,"utf-8"));
- system.out.println("<wap test>8859_1 to gb2312 " + "c8cb " + java.net.urlencoder.encode(iso_8859_1_to_gb2312,"gb2312"));
- system.out.println("<wap test>8859_1 to gbk " + "c8cb " + java.net.urlencoder.encode(iso_8859_1_to_gbk,"gbk"));
-
- system.out.println("<wap test>utf_8 to 8859_1 " + "e4baba" + java.net.urlencoder.encode(utf_8_to_8859_1,"8859_1"));
- system.out.println("<wap test>utf_8 to gb2312 " + "c8cb " + java.net.urlencoder.encode(utf_8_to_gb2312,"gb2312"));
- system.out.println("<wap test>utf_8 to gbk " + "c8cb " + java.net.urlencoder.encode(utf_8_to_gbk,"gbk"));
测试结果如下:
n800 openwave v6.1
- <wap test>*********************************************************
- <wap test>ren
- <wap test> utf_8 e4baba%e4%ba%ba
- <wap test> gbk c8cb %c8%cb
- <wap test> gb2312 c8cb %c8%cb
- <wap test> 8859_1 %3f
- <wap test>gb2312 to utf_8 e4baba%ef%bf%bd%ef%bf%bd
- <wap test>gb2312 to gbk c8cb %c8%cb
- <wap test>gb2312 to 8859_1 c8cb %c8%cb
- <wap test>gbk to utf_8 e4baba%ef%bf%bd%ef%bf%bd
- <wap test>gbk to gb2312 c8cb %c8%cb
- <wap test>gbk to 8859_1 c8cb %c8%cb
- <wap test>8859_1 to utf_8 e4baba%3f
- <wap test>8859_1 to gb2312 c8cb %3f
- <wap test>8859_1 to gbk c8cb %3f
- <wap test>utf_8 to 8859_1 e4baba%e4%ba%ba
- <wap test>utf_8 to gb2312 c8cb %e4%ba%3f
- <wap test>utf_8 to gbk c8cb %e4%ba%3f
[1] [2] 下一页