博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA中文乱码解决方法
阅读量:4289 次
发布时间:2019-05-27

本文共 1198 字,大约阅读时间需要 3 分钟。

一、乱码问题:

1、移动端提交的参数

使用http协议为移动端提供接口,android端直接可以传汉字,但是ios端,不允许直接传汉字,

所以移动端使用URLEncoder.encode编码,

引入java.net下面的包:import java.net.URLEncoder;

参数中有发票信息的参数,
String invoice = “发票抬头:北京科技发展有限公司” ;

invoice = URLEncoder.encode(invoice, "utf-8") ;

2、服务器接受的参数

服务器接收的参数,使用URLDecoder.decode解码
String invoice = request.getParameter("invoice") ;
invoice = URLDecoder.decode(, "UTF-8");
但是解码后的值是乱码:我的发票信息%E5%8F%91%E7%A5%A8%E4%BF%A1%E6%81%AF

二、解决方法:

1、移动端提交的参数

移动端编码两次
String invoice = “发票抬头:北京科技发展有限公司” ;
invoice = URLEncoder.encode(invoice, "utf-8") ;
invoice = URLEncoder.encode(invoice, "utf-8") ;

2、服务器接受的参数

使用URLDecoder.decode解码一次
String invoice = request.getParameter("invoice") ;
invoice = URLDecoder.decode(, "UTF-8");
但是解码后的值是;发票抬头:北京科技发展有限公司

三、原因分析:

1、为什么进行两次编码?

第一次编码,使多字节字符,变成纯粹的ascii码;
第二次编码,为了和服务器接受时,框架中封装好的自动解码相抵消。

2、用一次为什么不行?

URLEncoder使用的是UTF-8来编码的,

a、如果服务器端使用

request.getParameter("invoice")

接收时,容器也能够按照 UTF-8 解码的话,根本不用在移动端进行二次编码,使用完全一次就可以了。

b、如果服务器端使用request.getParameter("invoice"),

接收时,容器没有按照 UTF-8 解码的话,结果就会是乱码。

3、什么决定容器的解码格式?

a、request.setCharacterEncoding(“UTF-8”) ;
b、服务器项目的配置

说明:

1、我的项目是按照GBK编码格式创建的,而移动端都是UTF-8编码格式,所以移动端要调用我的接口,就需要编码两次,

2、因为项目一旦更改编码格式,好多jsp都要跟着改,所以这里就只能不该了。

转载地址:http://brmgi.baihongyu.com/

你可能感兴趣的文章
DbUtils入门
查看>>
每一个程序员需要了解的10个Linux命令
查看>>
service的自调用 VS service之间调用
查看>>
Android权限管理之Permission权限机制及使用
查看>>
重识Retrofit
查看>>
PowerDesigner(数据建模)使用大全
查看>>
RadioButton与CheckBox_优就业
查看>>
java中的throw与throws的区别
查看>>
js函数的传参是按值传对递
查看>>
优化用户登录体验效果
查看>>
用js批量选中功能实现更改数据库中status状态值_优就业
查看>>
JavaScript事件详解-zepto的事件实现(二)
查看>>
MySql表信息基础知识学习
查看>>
为什么document找到的不是html节点_优就业
查看>>
Javascript本地存储小结
查看>>
常用排序方法介绍
查看>>
Java异常分类和统一处理
查看>>
原 荐 cache线程池对数据库操作的饥饿问题
查看>>
使用Eclipse把java文件打包成jar 含有第三方jar库的jar包
查看>>
3种web会话管理的方式
查看>>