encodeURI要编码两次

var a="我的";
  //编译两次
//window.location.href = "http://127.0.0.1:8080/kabao-api/xtetest/c.do?title="+encodeURI(encodeURI(a));
window.location.href=encodeURI(encodeURI("http://127.0.0.1:8080/kabao-api/xtetest/c.do?title="+a));

后台接收编译两次之后的代码操作

String title = request.getParameter("title");
System.out.println(title); //%E6%88%91%E7%9A%84
String encode = URLDecoder.decode(title, "UTF-8");
System.out.println(encode); //我的



编译一次

var a="我的";
//编译一次
//window.location.href = "http://127.0.0.1:8080/kabao-api/xtetest/c.do?title="+encodeURI(a);
window.location.href=encodeURI("http://127.0.0.1:8080/kabao-api/xtetest/c.do?title="+a);

后台接收编译一次之后的代码操作

String title = request.getParameter("title");
System.out.println(new String(title.getBytes("ISO-8859-1"), "UTF-8"));



一般情况下,tomcat容器中request.getParameter(paramName);容器会自动按照容器默认的编码进行解码,默认是iso-8859-1,因为encodeURI使用的是UTF-8编码规则来编的,如果将tomcat的配置文件server.xml中的

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8" />

URIEncoding修改成utf-8那样在后台就不用解码了,因为容器会自动按照utf-8进行解码。

如果不能修改容器的编码就在接收的参数的时候先使用iso-8859-1接收然后在使用utf-8获取比如:title.getBytes("ISO-8859-1"), "UTF-8")

前台提交的时候进行二次编码,在第一次进行编码的时候进行utf-8进行了编码因为utf-8是最灵活的utf编码形式,即兼容iso -8859-1又可以用来表示所有语言的字符,而且ISO-8859-1编码范围使用了单字节内的所有空间,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。所以第一次编码就变成的单字节字符,第二次是为了与解码相对相应  即: 中文字符 ---->utf-8 -->utf-8(iso-8859-1) |||iso-8859-1容器解码-->utf-8用于解码-->中文字符  这样就相对应了,就不会产生编译乱码

也可以使用filter或者设置pageEncoding、contentType来设置定义编码

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

java 编码解码

java.net.URLEncoder.encode(String s,"编码");

java.net.URLDecoder.decode(String s,"编码");

js编码解码

encodeURI(String3.value);编码

decodeURI(String1.value);解码


escape(String);编码

unescape(string);解码


encodeURIComponent(URIstring);编码

decodeURIComponent(URIstring);解码

提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

详细编码介绍

传输中文乱码js解决方法的更多相关文章

  1. php 使用phpmailer 发送邮件(附带中文乱码的解决方法)

    下载phpmailer ,在程序里包含class.phpmailer.php 类  ,这里有中文乱码的解决方法 实例代码如下 <html> <head> <title&g ...

  2. xShell终端中文乱码完全解决方法

    xShell终端中文乱码完全解决方法 xShell(xShell5)以及其他终端中文乱码的原因无非有三种:(1)Linux系统的编码问题:(2)xShell终端的编码问题: (3)两端的语言编码不一致 ...

  3. Mysql命令行中文乱码的解决方法

    环境:Windows 8 64位,Mysql  5.0.96 for Win64 (x86) 数据库本身安装时默认已经是使用utf8编码的了,但在命令行中执行查询时,查询到的中文依然乱码,解决方法如下 ...

  4. 30. CentOS终端命令行显示中文乱码的解决方法

    安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方法:修改/etc/sysconfig/i18n,内容为   代码如下: LANG="zh_CN.GB18030&qu ...

  5. windows下SVN日志反馈中文乱码的解决方法

    转自:https://shiyousan.com/post/635889908703806636 TortoiseSVN中文乱码的问题困扰了我好久,特别是每次使用“以标准差异文件显示修改”时,打开的文 ...

  6. 【IntelliJ IDEA】从资源文件读取出来就中文乱码的解决方法

    在application.properties资源文件中设置两个自定义的属性以及属性值: com.sxd.name = "德玛西亚" com.sxd.want = "王者 ...

  7. ueditor 1.4.3 gbk asp 上传中文乱码 终极解决方法 ie6 ie8 也适用

    [摘要:百度编纂器1.43 gbk asp 题目 1.firefox3.0下 单图上传 面没有了 面多图上传 中央的蓝色按钮(即 面击挑选图片)没有表现(附件上传出那个题目) 没有晓得我的水狐吃翔了 ...

  8. Sublime Text 3 中文乱码的解决方法

    Sublime Text 3 中文乱码表现如下图: 解决方法很简单,三步搞定: 步骤一: 下载ConvertToUTF8,下载地址:http://pan.baidu.com/s/1gd5SWmB 步骤 ...

  9. mysql命令行以及mysql workbence查询结果中文乱码的解决方法

    最近正在学习mysql,安装环境是windows server 2003 32位操作系统+mysql 5.1.47同时也安装了mysql命令行以及mysql workbench这里是test数据库cr ...

随机推荐

  1. (转)vivoxshot 精英版三模转五模模式切换操作方法

    https://yunpan.cn/cPUBWc8vtKpID (提取码:de92) 本帖最后由 韩爱峰 于 2016-3-29 23:00 编辑 碰到不少机友在使用过程中操作不成功,现将我的方法跟大 ...

  2. FpSpread添加标注

    先看效果 实现: FarPoint.Web.Spread.StyleInfo Errorcss = new FarPoint.Web.Spread.StyleInfo(); Errorcss.Bord ...

  3. iOS_SN_Socket - AsyncSocket

    转载文章,原地址:http://yimouleng.com/2015/02/04/Socket-AsyncSocket/ 一.前言 公司的项目用到了Socket编程,之前在学习的过程当中,用到的更多的 ...

  4. UILabel 的使用,属性详解

    ·UILable是iPhone界面最基本的控件,主要用来显示文本信息. ·常用属性和方法有: .创建 CGRect rect = CGRectMake(, , , ); UILabel *label ...

  5. cocos2dx 碰撞检测

    //必须 要有float类型的参数 void MainScene::updateFrame(float dt) { if (spriteTest != NULL && spriteTe ...

  6. Couchbase 使用方法

    1.数据流向 List<模型>  数据-->MsgPack 打包成byte[]-> couchbase 实例调用 Store(Enyim.Caching.Memcached.S ...

  7. python学习第一天 -安装配置及其输入输出

    Python, 是一种面向对象.解释型计算机程序设计语言. python适合领域: 1.Web网络和各种网络服务 2.系统工具和脚本 3.作为“胶水”语言把其他语言开发的模块包装起来方便使用 pyth ...

  8. 函数reduce,lambda,filter

    #比较时间差,判断执行有时. import time def panduan(x): if x%5==0 and x%7==0: return True else: return False star ...

  9. a标签href不跳转 禁止跳转

    a标签href不跳转 禁止跳转 当页面中a标签不需要任何跳转时,从原理上来讲,可分如下两种方法: 标签属性href,使其指向空或不返回任何内容.如: <a href="javascri ...

  10. sqlserver exists和in 与exists和not in

    1.exists 和 in 1.1 正常情况下exists和in的效果是一样的,如图试验 即使子查询中包含null也没有关系,依然可以正常使用 1.2 in 和 exists效率比较 先看in 由图中 ...