当前位置: 技术问答>java相关
SEVLET中文问题,望大家多多帮忙,紧急!!,解决了多多加分!!!!!!!!
来源: 互联网 发布时间:2015-10-28
本文导语: String receivedata = request.getParameter("receive"); receivebin = TransCN.toBytes(receivedata); System.out.println("Post 1 toBytes.ISO10646 : "+receivebin); String Temp10646 = new String(receivedata.getBytes(),"ISO-10646-UCS-2"); System.out.println("Post 1.ISO10646 :...
String receivedata = request.getParameter("receive");
receivebin = TransCN.toBytes(receivedata);
System.out.println("Post 1 toBytes.ISO10646 : "+receivebin);
String Temp10646 = new String(receivedata.getBytes(),"ISO-10646-UCS-2");
System.out.println("Post 1.ISO10646 : "+Temp10646);
String receivebin = TransCN.toBytes(Temp10646);
System.out.println("Post 1 toBytes.ISO10646 : "+receivebin);
客户端不编码打印“中文 中文”UNICODE:4E2D6587204E2D6587
客户端使用ISO10646对“中文 中文”汉字编码,打印出 ?4E2D65870204E2D6587
SEVLET端上面的代码打印为:
Post 1 toBytes.ISO10646 : 4E2D65870204E2D6587
Post 1.ISO10646 : 中政 中政
Post 1 toBytes.ISO10646 : 4E2D653F0204E2D653F
如果换为“广州市”
客户端不编码打印“中文 中文”UNICODE:5E7F5DDE5E02
客户端使用ISO10646对“中文 中文”汉字编码,打印出 ?5E7F5D3F5E2
SEVLET端上面的代码打印为:
Post 1 toBytes.ISO10646 : 5E7F5DDE5E2
Post 1.ISO10646 : 广谔市
Post 1 toBytes.ISO10646 : 5E7F5D3F5E2
明显上面的“文”6587被改为653F,“州”5DDE被改为5D3F;
请问各位老兄该如何解决?
解决了多多加分!!!!!!!!
receivebin = TransCN.toBytes(receivedata);
System.out.println("Post 1 toBytes.ISO10646 : "+receivebin);
String Temp10646 = new String(receivedata.getBytes(),"ISO-10646-UCS-2");
System.out.println("Post 1.ISO10646 : "+Temp10646);
String receivebin = TransCN.toBytes(Temp10646);
System.out.println("Post 1 toBytes.ISO10646 : "+receivebin);
客户端不编码打印“中文 中文”UNICODE:4E2D6587204E2D6587
客户端使用ISO10646对“中文 中文”汉字编码,打印出 ?4E2D65870204E2D6587
SEVLET端上面的代码打印为:
Post 1 toBytes.ISO10646 : 4E2D65870204E2D6587
Post 1.ISO10646 : 中政 中政
Post 1 toBytes.ISO10646 : 4E2D653F0204E2D653F
如果换为“广州市”
客户端不编码打印“中文 中文”UNICODE:5E7F5DDE5E02
客户端使用ISO10646对“中文 中文”汉字编码,打印出 ?5E7F5D3F5E2
SEVLET端上面的代码打印为:
Post 1 toBytes.ISO10646 : 5E7F5DDE5E2
Post 1.ISO10646 : 广谔市
Post 1 toBytes.ISO10646 : 5E7F5D3F5E2
明显上面的“文”6587被改为653F,“州”5DDE被改为5D3F;
请问各位老兄该如何解决?
解决了多多加分!!!!!!!!
|
首先,确认你的提交form的网页中:
1. contentType设置为text/html; charset=GB18030
2. 浏览该网页的浏览器能正确显示该网页
这样,提交出来的表单将被编码为GB18030(因为多数浏览器将按照包含form的网页的编码来编码)或者utf-8,或者iso8859-1。注意,如果你的jdk是1.4之前的不支持GB18030的,需将前述的编码改为GB2312或者GBK。
其次,确认你的tomcat版本,可以到tomcat的主页的bug库上搜索一下,确保你的tomcat已经修补了与编码相关的补丁。
通常,tomcat有自己的编码猜测机制,大多数情况将正确显示。如果不能的话,可以尝试以下两种方法(注意,此两种方法都是Servlet 2.3增加的,意味着你必须用Tomcat 4,Tomcat 3是不行的。):
1. 显式改变解析编码
使用javax.servlet.http包的ServletRequest接口的setCharsetEncoding方法。
2. 使用filter预先设定编码,可参考tomcat的例子,其中有设定编码的例子。
1. contentType设置为text/html; charset=GB18030
2. 浏览该网页的浏览器能正确显示该网页
这样,提交出来的表单将被编码为GB18030(因为多数浏览器将按照包含form的网页的编码来编码)或者utf-8,或者iso8859-1。注意,如果你的jdk是1.4之前的不支持GB18030的,需将前述的编码改为GB2312或者GBK。
其次,确认你的tomcat版本,可以到tomcat的主页的bug库上搜索一下,确保你的tomcat已经修补了与编码相关的补丁。
通常,tomcat有自己的编码猜测机制,大多数情况将正确显示。如果不能的话,可以尝试以下两种方法(注意,此两种方法都是Servlet 2.3增加的,意味着你必须用Tomcat 4,Tomcat 3是不行的。):
1. 显式改变解析编码
使用javax.servlet.http包的ServletRequest接口的setCharsetEncoding方法。
2. 使用filter预先设定编码,可参考tomcat的例子,其中有设定编码的例子。
|
http://www2.ccw.com.cn/02/0224/c/0224c05_4.asp
|
String receivedata = request.getParameter("receive");
receivedata = new String(receivedata.getBytes("ISO8859-1"),"GB2312");
试试?
receivedata = new String(receivedata.getBytes("ISO8859-1"),"GB2312");
试试?
|
你用的是tomcat吗