字符窜提交时的乱码

关于escape和encodeURI:

在使用url直接提交中文内容时,如下:

var content = '这是测试内容'
var url = '/encodeTest.do?content='+escape(content)
document.form1.method = 'post'
document.form1.action = url
document.form1.submit()

采用以上方式提交内容时,服务器端(Java)获取内容:

String content = request.getParameter('content')

此处会有异常抛出:

 

ContractedBlock.gifExpandedBlockStart.gifCode
警告: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: isHexDigit
        at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:
87)
        at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:
48)
        at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:
411)

        at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.j
ava:
393)
        at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.j
ava:
509)
        at org.apache.tomcat.util.http.Parameters.handleQueryParameters(Paramete
rs.java:
266)
        at org.apache.catalina.connector.Request.parseParameters(Request.java:
23
61)
        at org.apache.catalina.connector.Request.getParameter(Request.java:
1005)

        at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacad
e.java:
353)

引发该异常的原因在于使用了escapse(为什么是它呢?不太清楚)

解决方案:

var content = '这是测试内容'
var url = '/encodeTest.do?content='+encodeURI(encodeURI(content))

//注意,这里的encodeURI连续使用了两次
document.form1.method = 'post'
document.form1.action = url
document.form1.submit()

在服务器端获取内容时,则需要使用java.net.URLDecoder来解码了。注意解码时使用的编码!根据具体的应用还要做不同的调整。如果之前使用了request.setCharacterEncoding("GBK")对编码进行设置,那么在解码的时候,可能要将编码重新转为UTF-8:request.setCharacterEncoding("UTF-8");
String content= java.net.URLDecoder.decode(note,"UTF-8");

 

转载于:https://www.cnblogs.com/ungshow/archive/2009/04/20/1439425.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值