JAVA中文乱码解决方法

一、乱码问题:

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都要跟着改,所以这里就只能不该了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值