遇到一个jquery post 提交中文乱码的问题,求大神

时间:2020-12-28 20:07:49
做一个管理系统,用户模块想通过ajax异步提交,来修改用户信息,项目采用的是统一GBK编码,由于我对ajax本身不是很熟悉,于是取巧,使用jquery封装好的$.post方法。js部分代码如下:function AjaxJq(carSub){
var url = "http://localhost:8080/aps2/Jajax";
$.post(url,
{ id:carSub["id"],
loginname:carSub["loginname"],
uname:carSub["uname"],
sex:carSub["sex"],
password:carSub["password"],
ctel:carSub["ctel"],
cemail:carSub["cemail"],
cbirthday:carSub["cbirthday"],
caddress:carSub["caddress"]
} ,
function(){alert("修改成功"); })}
取得文本框的数据是正缺的,接收数据采用的是servlet post 方法中的 request.getParameter("XXX");
User user = new User();request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
String uid = request.getParameter("id");
user.setId(Integer.parseInt(uid));
user.setUsername(utf(request.getParameter("loginname")));
user.setUname(utf(request.getParameter("uname")));
user.setUsex(utf(request.getParameter("sex")));
user.setPassword(utf(request.getParameter("password")));
user.setTel(utf(request.getParameter("ctel")));
user.setEmail(utf(request.getParameter("cemail")));
user.setBirth(utf(request.getParameter("cbirthday")));
user.setAddr(utf(request.getParameter("caddress")));
service.updateUser(user);打印到后台,发现英文字母和数字正常,中文显示乱码:
上网查了才知道jquery封装的ajax默认采用的是UTF-8编码的,
于是考虑到了转码,在接受的字符串前加了utf()方法:
public static String utf(String str) throws UnsupportedEncodingException{
return new String(iso.getBytes("ISO-8859-1"),"UTF-8");}
然后发现有中文显示了,经几次测试发现,当中文为偶数个时显示正常,奇数个时,多出的那个字显示为?;
再次上网查看,有人说,GBK编码一个汉字占两个字节,utf-8占三个字节,转换时,缺少的被在前面加0了,然后我就一直没解决这问题

是不是写的太长了,都懒得看了,就这样吧,有懂得就开导开导我吧。。。。。。。

7 个解决方案

#1


前台JSP
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
后台取值前:
resp.setContentType("text/html;charset=utf-8");

如果不行统一换成GB2312再测试

#2


同意楼上的方法;
你试一下设置request的编码格式呢,然后再request.getParameter();

#3


为什么不你统一用utf-8的编码呢?

#4


你获取的时候不需要转码,把你的request.setCharacterEncoding("gbk");去掉也不要经过你的utf方法

#5


引用 3 楼 licip 的回复:
为什么不你统一用utf-8的编码呢?


我这项目最初是统一的GBK,编码,按照楼上诸位的,在接受端设置request的编码,根本不管用

#6


前台用encodeURI()编码,后台用java.net.URLDecoder.decode(XXX,"utf-8")解码,我在项目中碰到过和你一样的问题,就是这么解决的

#7


引用 1 楼 abcmsnet 的回复:
前台JSP
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
后台取值前:
resp.setContentType("text/html;charset=utf-8");

如果不行统一换成GB2312再测试

还好,解决了 response.setCharacterEncoding("utf-8");

#1


前台JSP
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
后台取值前:
resp.setContentType("text/html;charset=utf-8");

如果不行统一换成GB2312再测试

#2


同意楼上的方法;
你试一下设置request的编码格式呢,然后再request.getParameter();

#3


为什么不你统一用utf-8的编码呢?

#4


你获取的时候不需要转码,把你的request.setCharacterEncoding("gbk");去掉也不要经过你的utf方法

#5


引用 3 楼 licip 的回复:
为什么不你统一用utf-8的编码呢?


我这项目最初是统一的GBK,编码,按照楼上诸位的,在接受端设置request的编码,根本不管用

#6


前台用encodeURI()编码,后台用java.net.URLDecoder.decode(XXX,"utf-8")解码,我在项目中碰到过和你一样的问题,就是这么解决的

#7


引用 1 楼 abcmsnet 的回复:
前台JSP
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
后台取值前:
resp.setContentType("text/html;charset=utf-8");

如果不行统一换成GB2312再测试

还好,解决了 response.setCharacterEncoding("utf-8");