关于上传图片出现乱码的问题

                关于上传图片出现乱码的问题

    最近在赶一个小项目(我是菜鸟,没办法,只能慢工出细活),它是一个关于拉圈旅游,可以实现android端和Web端的小项目,android有点类似于QQ,而Web端有点类似于CSDN。只不过是关于旅游的。我用的是MyeclipseMySQL。所有的处理都交给相应的Servlet(菜鸟嘛,呵呵呵),所有的数据处理交给DAO包里面的类。

昨天的进度到了Web端的上传图片及头像的上传于修改这个功能点上,根据需求,用户可以发布旅游地点,在发布的同时可以上传相关的景点图片,并且用户在注册的时候,可以上传头像,也可以以后再上传或者修改。

我在服务器端将所有的图片处理都封装在一个类(UpLoadImage)里面,并在各个页面的头像与图片显示的类型改为“file”,当然在相应的servlet中也作了相应的修改,并且在每个涉及到图图片上传的servlet中都使用了UpLoadImage这个类,并将获得的数据交给UpLoadImage类中的方法upload处理。返回一个Map类型的对象数组map,在servlet中将相关的数据从map中取出来。

下面是处理注册的servlet的关键代码:

    req.setCharacterEncoding("utf-8");

String client = req.getHeader("client");

    UpLoadImage upload=new UpLoadImage();

Map  map = upload.upload(req,getServletContext().getRealPath

        ("uploadImage"));

username =""+map.get("username");

password =""+map.get("password");

nick_name =""+map.get("nick_name");

qq =""+map.get("qq");

sex =""+map.get("sex");

address =""+map.get("address");

icon="uploadImage\\"+map.get("upload_file_path");

 

System.out.println("   username="+username);

register.jsp页面的部分代码:

 

 

做如上处理之后,就可以上传图片了,可是,测试之后才发现,一切都仅仅只是我的臆测,乱码(只要是中文,结果就是乱码)出现了,我以输出username做测试:

我在注册表中填入相关信息:

 

 

输出的结果是:

 

啥玩意儿,明明是“你好”,到了数据库中却变成了乱码:

 

    本来我以为是req.setCharacterEncoding("utf-8")这句代码出了问题,可当我将这句代码删了之后,还是乱码,之后,试了各种我已知道的办法,发现还是乱码。

后来,经过高人(赵工)指点,原来是服务器的编码设置与客户端的编码方式不一致。我将MyEclipse的编码都给改了,可还是不行。最后,赵工说,实在不行就强转。但我并不清楚我的MyEclipse的编码方式是什么,没办法,只能一个个试了。

页面的代码没变,改变的仅仅是servlet的代码,还是以输出username来测试:

        req.setCharacterEncoding("utf-8");

System.out.println(" 1  username="+username);

username = new String( username.getBytes("iso8859-1"),

"utf-8");

System.out.println(" 2  username="+username);

username = new String(username.getBytes("iso8859-1"),

"gbk");

System.out.println(" 3  username="+username);

username = new String(username.getBytes("gbk"),"utf-8");

   System.out.println(" 4  username="+username);

同样的填写及提交注册表单:

 

Myeclipse中的输出结果为:

 

数据库中的数据:

 

一切都出来了,很明显,我需要的仅仅只是将编码方式为iso8859-1的所有数据(仅仅是需要上传图片的相关的servlet里面的参数)强转为utf-8即可,即:

username = new String( username.getBytes("iso8859-1"),"utf-8");

password = new String( password.getBytes("iso8859-1"),"utf-8");

nick_name = new String( nick_name.getBytes("iso8859-1"),"utf-8");

qq = new String( qq.getBytes("iso8859-1"),"utf-8");

sex = new String( sex.getBytes("iso8859-1"),"utf-8");

address = new String( address.getBytes("iso8859-1"),"utf-8");

icon = new String( icon.getBytes("iso8859-1"),"utf-8");

一切都Ok了!那我再做一次测试:

同样的,填写表单:

 

提交之后,Myeclipse中的输出为:

 

数据库中存储的数据为:

 

这个为问题解决了。类似的问题,应该也可以用这种方法,当然,我是菜鸟,我还没有去试过。

以上仅仅只是我个人的观点,若对此有疑惑或者有什么问题的地方,欢迎各位高人给我以指点。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值