GBK页面的表单post提交到UTF-8编码的servlet如何解决中文乱码问题??

时间:2023-01-05 10:05:21
如题,在对接接口,调用别人的接口后,他们会回调我这边的一个servlet,但是他们的页面是GBK的,我这边的项目编码是UTF-8的,而且他们不可能更改编码,我们也不改变编码的情况下,如何解决??



谢谢.

17 个解决方案

#1


servlet中  request获取参数时设置编码为GBK

#2


引用 1 楼 wangjianwei_ 的回复:
servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....

#3


引用 2 楼 jimmy609 的回复:
Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢

#4


估计得来回转。。

#5


引用 3 楼 wangjianwei_ 的回复:
Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

#6


引用 5 楼 jimmy609 的回复:
Quote: 引用 3 楼 wangjianwei_ 的回复:

Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

页面提交是form表单直接提交的,还是拼的参数

#7


引用 6 楼 wangjianwei_ 的回复:
Quote: 引用 5 楼 jimmy609 的回复:

Quote: 引用 3 楼 wangjianwei_ 的回复:

Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

页面提交是form表单直接提交的,还是拼的参数


post  表单 ,这个问题我大概知道原因了,对反的平台是GBK,我这边web.xml里已经转成了utf-8,所以会乱码的

#8


估计是不行了。
tomcat设置编码,是对get方法或者是URI进行urldecode,到达你的程序里面已经是一个乱码了。
本质问题是这样。


String s = "我";
//这个是对方的编码
s = java.net.URLEncode(s,"gbk");

//下面这个是tomcat中自动转码
s = java.net.URLDecode.decode(s,"utf-8");

问题就在于,现在这个s怎么能回去。我感觉是回不去了,因为gbk和utf8的长度都不一样了。

所以以后还是不要轻易的设置编码,用iso_8859_1比较好,需要设置get或URI编码时可以在过滤器里面。出现现在的状况几乎无法解决了吧。

#9


做个URLEncode试试

#10


引用 8 楼 ivan_070 的回复:
估计是不行了。
tomcat设置编码,是对get方法或者是URI进行urldecode,到达你的程序里面已经是一个乱码了。
本质问题是这样。


String s = "我";
//这个是对方的编码
s = java.net.URLEncode(s,"gbk");

//下面这个是tomcat中自动转码
s = java.net.URLDecode.decode(s,"utf-8");

问题就在于,现在这个s怎么能回去。我感觉是回不去了,因为gbk和utf8的长度都不一样了。

所以以后还是不要轻易的设置编码,用iso_8859_1比较好,需要设置get或URI编码时可以在过滤器里面。出现现在的状况几乎无法解决了吧。


目前看来只能自己定义编码的过滤器,然后在过滤器里面做处理,其他还真想不出什么方法了....

#11


引用 7 楼 jimmy609 的回复:
Quote: 引用 6 楼 wangjianwei_ 的回复:

Quote: 引用 5 楼 jimmy609 的回复:

Quote: 引用 3 楼 wangjianwei_ 的回复:

Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

页面提交是form表单直接提交的,还是拼的参数


post  表单 ,这个问题我大概知道原因了,对反的平台是GBK,我这边web.xml里已经转成了utf-8,所以会乱码的


乱码问题很头疼,根本无法完全避免,尽量了解整个提交的流程,这样解决的快些

#12


这个问题,我现在是这样解决的,原来是在web.xml里面配置编码

现在是自己定义了一个Fiter去做,判断如果请求的路径为  对方回调的路径,就给它gbk的编码 ,else的就是utf-8,

这样也不影响原来的编码格式

#13


引用 4 楼 rui888 的回复:
估计得来回转。。

#14


你解码你的,把他传过来的数据转化成你的编码,他解码他的,他把你传过去的数据转化成他的编码,其它按照正常的来

#15


如果对方强势,那就只能你负责传的数据编码符合他的要求了

#16


引用 15 楼 abcd880129 的回复:
如果对方强势,那就只能你负责传的数据编码符合他的要求了


对方的接口给N家公司使用,不可能为我一家修改的,所以只能我这边想办法,目前这种解决方法应该是比较好的,个人感觉转码是不好转的

#17


只有来回转了

#1


servlet中  request获取参数时设置编码为GBK

#2


引用 1 楼 wangjianwei_ 的回复:
servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....

#3


引用 2 楼 jimmy609 的回复:
Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢

#4


估计得来回转。。

#5


引用 3 楼 wangjianwei_ 的回复:
Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

#6


引用 5 楼 jimmy609 的回复:
Quote: 引用 3 楼 wangjianwei_ 的回复:

Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

页面提交是form表单直接提交的,还是拼的参数

#7


引用 6 楼 wangjianwei_ 的回复:
Quote: 引用 5 楼 jimmy609 的回复:

Quote: 引用 3 楼 wangjianwei_ 的回复:

Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

页面提交是form表单直接提交的,还是拼的参数


post  表单 ,这个问题我大概知道原因了,对反的平台是GBK,我这边web.xml里已经转成了utf-8,所以会乱码的

#8


估计是不行了。
tomcat设置编码,是对get方法或者是URI进行urldecode,到达你的程序里面已经是一个乱码了。
本质问题是这样。


String s = "我";
//这个是对方的编码
s = java.net.URLEncode(s,"gbk");

//下面这个是tomcat中自动转码
s = java.net.URLDecode.decode(s,"utf-8");

问题就在于,现在这个s怎么能回去。我感觉是回不去了,因为gbk和utf8的长度都不一样了。

所以以后还是不要轻易的设置编码,用iso_8859_1比较好,需要设置get或URI编码时可以在过滤器里面。出现现在的状况几乎无法解决了吧。

#9


做个URLEncode试试

#10


引用 8 楼 ivan_070 的回复:
估计是不行了。
tomcat设置编码,是对get方法或者是URI进行urldecode,到达你的程序里面已经是一个乱码了。
本质问题是这样。


String s = "我";
//这个是对方的编码
s = java.net.URLEncode(s,"gbk");

//下面这个是tomcat中自动转码
s = java.net.URLDecode.decode(s,"utf-8");

问题就在于,现在这个s怎么能回去。我感觉是回不去了,因为gbk和utf8的长度都不一样了。

所以以后还是不要轻易的设置编码,用iso_8859_1比较好,需要设置get或URI编码时可以在过滤器里面。出现现在的状况几乎无法解决了吧。


目前看来只能自己定义编码的过滤器,然后在过滤器里面做处理,其他还真想不出什么方法了....

#11


引用 7 楼 jimmy609 的回复:
Quote: 引用 6 楼 wangjianwei_ 的回复:

Quote: 引用 5 楼 jimmy609 的回复:

Quote: 引用 3 楼 wangjianwei_ 的回复:

Quote: 引用 2 楼 jimmy609 的回复:

Quote: 引用 1 楼 wangjianwei_ 的回复:

servlet中  request获取参数时设置编码为GBK


request.setCharacterEncoding("gbk");    这样??不行的.....



 string =request.getParameter() 
 bytes = string.getBytes("iso-8859-1")
 string = new String(bytes, "GB2312") 

这样呢


这种也试过  不行的  

页面提交是form表单直接提交的,还是拼的参数


post  表单 ,这个问题我大概知道原因了,对反的平台是GBK,我这边web.xml里已经转成了utf-8,所以会乱码的


乱码问题很头疼,根本无法完全避免,尽量了解整个提交的流程,这样解决的快些

#12


这个问题,我现在是这样解决的,原来是在web.xml里面配置编码

现在是自己定义了一个Fiter去做,判断如果请求的路径为  对方回调的路径,就给它gbk的编码 ,else的就是utf-8,

这样也不影响原来的编码格式

#13


引用 4 楼 rui888 的回复:
估计得来回转。。

#14


你解码你的,把他传过来的数据转化成你的编码,他解码他的,他把你传过去的数据转化成他的编码,其它按照正常的来

#15


如果对方强势,那就只能你负责传的数据编码符合他的要求了

#16


引用 15 楼 abcd880129 的回复:
如果对方强势,那就只能你负责传的数据编码符合他的要求了


对方的接口给N家公司使用,不可能为我一家修改的,所以只能我这边想办法,目前这种解决方法应该是比较好的,个人感觉转码是不好转的

#17


只有来回转了