java 中文参数转码_url中传递中文参数时的转码与解码

JavaScript中提供了escape、encodeURI和encodeURIComponent三个函数来对URL进行编码,主要区别在于编码的字符范围不同。escape不编码字符有69个,encodeURI不编码字符有82个,encodeURIComponent编码更多,适用于参数传递。当页面编码与接收页面编码不一致时,需考虑使用encodeURI或encodeURIComponent,并确保后台能解码UTF-8。在URL参数传递时,encodeURIComponent是最常用的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。

例如:

2、进行url跳转时可以整体使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度& ct=21");

3、js使用数据时可以使用escape

[Huoho.Com编辑]

例如:搜藏中history纪录。

4、escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下 escape,encodeURI,encodeURIComponent编码结果相同。

最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a- z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

javaScript中URL编码转换,escape() encodeURI() encodeURIComponent

在使用url进行参数传递时,经常会传递一些中文名的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端javascript的encodeURI函数编码的URL,结果就不一样。

javaScript中的编码方法:

escape() 方法:

采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / +

encodeURI() 方法:

把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '

encodeURIComponent() 方法:

把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( )

因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用 encodeURI或者encodeURIComponent。

另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在 javascript1.0版本就有。

Java中的轻量级转码解码可以通过使用Java标准库中的java.nio.charset包来实现。该包提供了一组类和接口,用于在不同的字符集编码之间进行转换。 在Java中,可以使用Charset类来表示字符集。Charset类提供了一些静态方法来获取常见字符集的实例,例如UTF-8、GBK等。可以使用Charset.forName(String charsetName)方法来获取指定字符集的实例。 一旦获取了字符集的实例,就可以使用CharsetEncoder和CharsetDecoder类来进行编码解码操作。CharsetEncoder用于将字符序列编码为字节序列,而CharsetDecoder用于将字节序列解码为字符序列。 下面是一个简单的示例代码,演示了如何使用Java的轻量级转码解码功能: ```java import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetDecoder; import java.nio.ByteBuffer; import java.nio.CharBuffer; public class TranscodingExample { public static void main(String[] args) { String str = "Hello, 你好!"; Charset charset = Charset.forName("UTF-8"); // 编码 CharsetEncoder encoder = charset.newEncoder(); ByteBuffer byteBuffer = null; try { byteBuffer = encoder.encode(CharBuffer.wrap(str)); } catch (Exception e) { e.printStackTrace(); } // 解码 CharsetDecoder decoder = charset.newDecoder(); CharBuffer charBuffer = null; try { charBuffer = decoder.decode(byteBuffer); } catch (Exception e) { e.printStackTrace(); } System.out.println("原始字符串:" + str); System.out.println("解码后的字符串:" + charBuffer.toString()); } } ``` 这段代码中,我们首先创建了一个字符串`str`,然后使用Charset.forName方法获取了UTF-8字符集的实例。接下来,我们使用CharsetEncoder将字符串编码为字节序列,再使用CharsetDecoder将字节序列解码为字符序列。最后,打印出原始字符串和解码后的字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值