java实用教程:一个有趣的异常java.io.CharConversionException
java实用教程:一个有趣的异常--java.io.CharConversionException:页面需要通过get请求传递中文参数(其实吧,如果没有特殊需求,还是老老实实用post传中文比较好.不过既然遇到了,咱不解决说不过去啊),有人说用js的param=escape("中文");在服务器端用URLDecoder(param,"utf-8");解码.

试了一下,有幸见到了一个新的异常.
|
警告: Parameters: Character decoding failed. Parameter skipped. java.io.CharConversionException: isHexDigit at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:88) at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:49) at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:412) at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:394) at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:510) at org.apache.tomcat.util.http.Parameters.handleQueryParameters(Parameters.java:267) at org.apache.catalina.connector.Request.parseParameters(Request.java:2453) at org.apache.catalina.connector.Request.getParameterNames(Request.java:1082) at org.apache.catalina.connector.Request.getParameterMap(Request.java:1062) at org.apache.catalina.connector.RequestFacade.getParameterMap(RequestFacade.java:414) at org.apache.struts2.dispatcher.Dispatcher.createContextMap(Dispatcher.java:527) at org.apache.struts2.dispatcher.ng.PrepareOperations.createActionContext(PrepareOperations.java:78) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:78) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:662) |
看异常信息,貌似escape();是按照十六进制编码的.而URLDecoder却不是按十六进制解码.
找到了解决方案.
页面param=encodeURI(encodeURI("中文"));对,没看错,实测是编码两次.在服务器端,还是用URLDecoder(param,"utf-8");解码.
无异常,且中文正常.
本文来源 我爱IT技术网 http://www.52ij.com/jishu/427.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
