博客:(前后台文件编码相同)前台传后台中文乱码

4月4日补充

jsp页面第一句没有下面一句或者页面发布后查看源代码时第一句已经不在了

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

主要思想,前台进行两次编码,后台进行两次解码,一定得是两次,第一次对字符编码,第二次对符号 % 编码(例如编码后效果: http://localhost:8080/EOMS/manager/edituser?batch=20190318105448(%E6%9B%B4%E6%AD%A3))

<!--前台:-->
url = test? value = encodeURI(encodeURI(参数值))
<!--后台: -->
String value = request.getParam("value");
value = new String(value.getBytes("iso-8859-1"),"utf-8");
value = java.net.URLDecoder.decode(value,"UTF-8");

下面是demo

前台代码

<!--先使用两次encodeURI()对参数进行编码,再到后台进行解码-->
<a href='/EOMS/manager/edituser?batch="+encodeURI(encodeURI(data.rows[i].batch))+"' class='iconfont icon-bianji'></a>

后台代码

/**
* 进入批次编辑页面
*/
@RequestMapping("edituser")
public String edituser(String batch, Model model) {
<!--接受前台传递过来的参数并进行解码-->
try {
batch = new String(batch.getBytes("iso-8859-1"),"utf-8");
batch = java.net.URLDecoder.decode(batch,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} model.addAttribute("batch", batch);
return "/views/manager/edituser"; }

文章全部:

地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分。

  第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。

  js中编码有escape(), encodeURI(),
encodeURIComponent()三个常用的方法。escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),escape方法已经过时,且无法编码url中的中文。所以常用encodeURI()和encodeURIComponent(),它们的用法基本相同,区别在于encodeURIComponent()也对"?"等特殊字符进行编码。   一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出isHexDigit异常。借助百度搜索isHexDigit异常,发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,
第二次是对%xy中的%进行编码,%编码成%。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%xy传递给处理页面的过程中,浏览器获取URL地址(注意
openModelDialog方法, 浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用   URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。   总结:   1、汉字出现在URL路径部分的时候不需要编码解码;   2、使用encodeURI进行2次编码;   3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;   客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”,
"UTF-8");   今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。   在页面中:   /exportExcel.topinfo?ls="+encodeURI(encodeURI(_tmplsgx))+"&zt="+encodeURI(encodeURI(_tmpzt))   在action中   String ls=request.getParameter("ls");   ls = new String(ls.getBytes("iso-8859-1"),"utf-8");   ls = java.net.URLDecoder.decode(ls,"UTF-8");   这样乱码就解决了。

前台get传递含中文数据到后台出现中文乱码的更多相关文章

  1. 解决mysql无法插入中文数据及插入后显示乱码的问题

    (1)废话不多说就是使用mysql数据库的时候无法输入中文,可以输入中文后显示的又是乱码!! (2开始解决问题: 第一步:找到安装mysql的目录找到 my.ini 文件: 第二步:使用记事本打开my ...

  2. 使用Struts 2框架、ajax提交中文数据在后台乱码的问题

    通过encodeURI()方法转码 encodeURI(url):

  3. url中拼接中文参数,后台接收为乱码的问题

    遇到在URL中拼接中文的参数,后台拿到的数据为乱码的问题,这里来说一下问题出现的原因与解决方法. 大家比较关心的应该是解决的方法,因此先说解决方法. 解决方法 解决的方法是在客户端对这个中文参数进行编 ...

  4. Pandas使用to_csv保存中文数据用Excel打开是乱码

    关于这个问题还是困扰了很久,我生成了一些样本数据,打算保存到csv文件,之后用pandas的命令: # data是DataFrame的格式 data.to_csv('./data/myfile.csv ...

  5. ASP.NET前台html页面AJAX提交数据后台ashx页面接收数据

    摘要:最近在写网站,好不容易弄好了需求又变了,没错企业的门户网站硬要弄成后台管理系统一样,没办法作为小工的我只能默默的改.前台HTML页面需要提交数据到后台处理,又不能用form表单,于是乎研究了1天 ...

  6. ajax获取后台传递的json数据

      最近在使用JQuery的ajax方法时,需要返回的数据为json数据,在success返回中数据处理会根据返回方式不同会采用不同的方式来生成json数据.在$.ajax方法中应该是如何来处理的,简 ...

  7. form表单提交中文乱码(前台中文到JAVA后台乱码)问题及解决

    form表单提交中文乱码(前台中文到JAVA后台乱码)问题及解决 一.问题: 页面输入框中的中文内容,在后台乱码,导致搜索功能失效:(详细可以见后面的重现) 二.原因: 浏览器对于数据的默认编码格式为 ...

  8. 解决Ajax前台中文传到后台出现中文乱码

    遇到的问题是: 前台利用Ajax, get方式向后台发送中文数据出现乱码. 解决办法是前台两次编码, 后台一次解码即可. 前台jsp文件 1 var text = "张三"; 3 ...

  9. ajax向后台传递数组参数并将后台响应的数据赋值给一个变量供其它插件使用

    1.在js中封装ajax向后台传递数组参数函数 //combogrid * * @Description 封装ajax向后台传递数组参数并将后台响应的数据赋值给一个变量方便其他插件使用该数据函数 * ...

随机推荐

  1. python:正则0

    Python3 正则表达式特殊符号及用法(详细列表) 正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合.子组匹配.模式重复次数.正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不只 ...

  2. WeTest明星工具-移动端性能测试PerfDog初探

    在十一月初,腾讯就官宣了一则消息,腾讯WeTest明星工具-PerfDog面向全球发布.官宣介绍如下:https://wetest.qq.com/lab/view/475.html.我在看到该新闻时, ...

  3. three.js使用卷积法实现物体描边效果

    法线延展法 网上使用法线延展法实现物体描边效果的文章比较多,这里不再描述. 但是这种方法有个缺点:当两个面的法线夹角差别较大时,两个面的描边无法完美连接.如下图所示: 卷积法 这里使用另一种方法卷积法 ...

  4. 【Luogu P2563】【集训Day 4 动态规划】质数和分解

    题目链接:Luogu P2563 质数和分解(prime) [问题描述] 任何大于 1 的自然数 N,都可以写成若干个大于等于2且小于等于 N 的质数之和表达式(包括只有一个数构成的和表达式的情况), ...

  5. 科学使用Log4View2

    目录 目录 前言 科学使用 编辑和调试程序集 调试程序集 编辑程序集 结语 推荐文献 目录 NLog日志框架使用探究-1 NLog日志框架使用探究-2 科学使用Log4View2 前言 这个标题很低调 ...

  6. SpringBoot实现登录

    1.使用Spring Initializer快速创建Spring Boot项目 1.1 IDEA:使用 Spring Initializer快速创建项目 IDE都支持使用Spring的项目创建向导快速 ...

  7. Docker 更换国内的Hub源

    前言 通常情况下,安装的Docker默认使用的是国外的Hub源,在pull镜像的时候很慢,甚至超时了,不动了,很烦人. 更换阿里云Docker的Hub源 阿里云 - 容器Hub服务控制台:https: ...

  8. VLAN实验5(在ensp上利用三层交换机实现VLAN间路由)

    原理概述: VLAN将一个物理的LAN在逻辑上划分成多个广播域.VLAN内的主机间可以直接通信,而VLAN间不能直接互通. 在现实网络中,经常会遇到需耍跨VLAN相互访问的情况,工程师通常会选择一些方 ...

  9. Scrapy爬虫及案例剖析

    由于互联网的极速发展,所有现在的信息处于大量堆积的状态,我们既要向外界获取大量数据,又要在大量数据中过滤无用的数据.针对我们有益的数据需要我们进行指定抓取,从而出现了现在的爬虫技术,通过爬虫技术我们可 ...

  10. Java基础面试相关

    面试相关的问题(下) 四 Linux高级_ 1.Linux机器 变慢,怎么查看? (1)整机的性能 主要查看的是CPU和内存 先查看整机的top,使用命令 top 虚拟机 使用1可以查看哪个核被占用过 ...