JS 和 Java 中URL特殊字符编码方式

  前几天遇到url特殊字符编码的问题,在这里整理一下:

  JavaScript

  1.  编码 escape(String)

    其中某些字符被替换成了十六进制的转义序列。

   

   解码 unescape(String)

    该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。

    *注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

  2. 编码 encodeURI(URIstring)

    返回值:URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

    *如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。

   解码 decodeURI(URIstring)

    返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

  3. 编码 encodeURIComponent(URIstring)

    返回值:URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

   解码 decodeURIComponent(URIstring)

    返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

  *encodeURIcomponent() 与 encodeURI() 区别

    encodeURIComponent(URIstring) : 假定其参数是URI一部分(比如协议、主机名、路径或查询字符串),因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号(? # 等)。

    encodeURI(URIstring) : 不会对URI中的分隔符编码,如 ? # 等。

  Java

    编码: Class URLEncoder 

    static String encode(String s);
    static String encode(String s, String enc);//enc 编码方式 推荐使用UTF-8

    解码: Class URLDecoder

    static String decode(String s);
    static String decode(String s, String enc);//enc 编码方式 推荐使用UTF-8

    * Java中的编码解码方式和JS中的encodeURIComponent()/decodeURIComponent()方法是前后台通用的;两者在处理字符串的方式是没有区别的;

时间: 2024-12-02 22:20:34

JS 和 Java 中URL特殊字符编码方式的相关文章

java中URL 的编码和解码函数

java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascript 中URL 的编码和解码函数escape(String s)和unescape(String s) ; 在前台:var url="test.jsp?param="+escape('this%is#te=st&o k?+/');在后台: String param=request.

JS/JSP/Java 中 URL/参数 的转义

1. URLEncoder.encode URLDecoder.decode 2. 2.1.encodeURIComponent : 返回值 URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换. 说明 该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) . 其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的. 提示和注释 提示:

JAVA中BufferedReader设置编码的必要性

实验环境 Myeclipse 默认编码 UTF-8 先看两种读文件的方式: 方式一: InputStreamReader fReader = new InputStreamReader(new FileInputStream(filePathString),"UTF-8"); BufferedReader reader = new BufferedReader(fReader); String line; while ((line = reader.readLine()) != nul

为什么Java中实现多线程的方式有两种?

在面试的过程中,我们经常问被面试者,为什么Java中实现多线程的方式有两种(一种是直接继承Thread类,一种是实现Runnable接口)?可惜的是,很多面试者都答不出来,甚至从来没有想为什么.,那么真正的原因是什么呢?我们可以用反证法推理一下: 假设Java只提供Thread供大家继承从而实现多线程,考虑下面的一个需求,如果有一个已经继承了某个父类的类,但是这个类又想实现多线程,怎么办?很显然,如果只提供一个可以继承的类,肯定解决不了这个问题.那么,如何解决,毫无疑问,就只能使用接口了.

Java中数组的初始化方式

Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组元素分配初始值

js和java中正则表达式的易混淆点

js中正则表达式的使用 对表单中的值进行正则表达式匹配一般有两种方法: var reg = new RegExp(regStr); reg.test(value); 如下: var reg = new RegExp("\\d{3}"); reg.test("abc123def"); 结果:true 注:new RegExp中传的是正则表达式的字符串,\需要用\转义. str.match(regex);      如"abc123def".matc

转:JAVA中各种字符编码类型转换

import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ public static final String US_ASCII = "US-ASCII"; /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */ public static final

java中复制文本文件的方式我总结为14种(按字符读取4中,按字节读取8种!??)

java中复制文件的方式 如果按照字符来读取的话,可以有4种,基本的2种,高效的2种,高效特殊的1种 第0种: public class CopyFileDemo { public static void main(String[] args) throws Exception{ //封裝数据源 BufferedReader reader = new BufferedReader(new FileReader("a.txt")); //封装目的地 BufferedWriter writ

Java中实现线程的方式

Java中实现线程的方式 Java中实现多线程的方式的方式中最核心的就是 run()方法,不管何种方式其最终都是通过run()来运行. Java刚发布时也就是JDK 1.0版本提供了两种实现方式,一个是继承Thread类,一个是实现Runnable接口.两种方式都是去重写run()方法,在run()方法中去实现具体的业务代码. 但这两种方式有一个共同的弊端,就是由于run()方法是没有返回值的,所以通过这两方式实现的多线程读无法获得执行的结果. 为了解决这个问题在JDK 1.5的时候引入一个Ca