Java网络中代码乱码的现象:
第一类:前台参数在发送到服务器后被置乱
1。GET request参数以中文发送给服务器,并带有乱码
2。post request参数以中文发送给服务器,并带有乱码
第二类:服务器响应在到达浏览器后被打乱
3 .在JSP页面中,中文显示乱码
出现在Java网站上的各种代码:
1。JSP文件自己的编码方式
以下编码规范将出现在JSP文件中:
1 ) page encoding = " UTF - 8 " - JSP文件本身使用的编码格式,即告诉服务器将JSP文件翻译成Java文件时使用什么编码
JSP中POST表单的编码由页面编码和内容类型参数决定,标准是页面编码,如果没有页面编码,则为内容类型,如果元标签中没有字符集,则为ISO - 8859 - 1。
2 ) contentType = "文本/ html;charset = UTF - 8 "服务器发送浏览器的数据类型和内容编码。charset = " UTF - 8 " - "用于指定Tomcat返回响应时使用的编码,也是后期模式提交参数的编码方法。
3 )元标签中的字符集是当内容类型未指定编码时使用的默认编码格式
2。Tomcat在读取JSP文件时使用的编码
参考文献1 )
3 .Tomcat用来返回响应的代码
参考文献2 )
4。浏览器在显示HTML时使用的代码
浏览器编码格式的设置
根据现象分析解决方案:
1。获取请求参数被置乱
2。后请求参数被置乱
post表单参数通过HTTP的正文传递给服务器。如前所述,表单项参数以内容类型中charset指定的编码格式编码。服务器端也用charset在内容类型中指定的代码进行解码,因此通常没有乱码问题。
可以根据请求设置此编码。设置字符结尾( )。此设置仅对post参数有效。请注意,此函数必须在第一次调用请求之前使用。获取参数( )。
3 .同时处理GET和POST的编码问题
GET和POST的不同性能使得处理起来更加困难。
根据1和2,可以使用组合方法来确定各种分辨率策略。
解决方案1 :分别处理获取和发布请求
处理获取请求:将参数uri编码= ' utf - 8 '添加到Tomcat服务器下的连接器属性中。XML (可扩展标记语言):
Processing mail requests: Set up requests in a servlet. Set character encoding ( )
解决方案2 :两者都使用手动重新解码
在上述两种方式中有一个共同的问题,即只要请求中有中文,每个servlet都会被重复处理。这个过程应该被提取出来。
解决方案3 :使用参数使用uri的体编码= ' true '
将参数usebodyenchingforuri = ' true '添加到Tomcat服务器下的连接器属性中。XML (请注意,正文编码不应用于整个uri,而仅应用于查询字符串)。这样,Tomcat将使用请求指定的代码解析GET参数。setcharacter编码( )。
解决方案4 :使用过滤过滤器和动态代理来实现统一编码
Packaging code filter;
Import exception;
Import Java. lang. reflect. call handler;
导入爪哇。朗。反思。方法;
导入爪哇。朗。反思。代理;
Import JavaX. Servlet. Filter;
Import JavaX. Servlet. Filter Chain;
导入贾瓦克斯。薮猫。过滤器配置;
导入贾瓦克斯。薮猫。servletexception;
导入贾瓦克斯。薮猫。小服务程序请求;
导入贾瓦克斯。薮猫。小服务程序响应;
Import;
导入贾瓦克斯。薮猫。超文本传输协议。httpsepservletresponse;
The common class encoding filter implements the filter
Public Space Destruction ( )
}
public void do filter ( service request, service response,
过滤链链) )抛出IOException,ServletException *
/ /如果希望匿名内部类使用外部定义的对象,编译器将要求其参数引用是最终的
奇云httpsepservletrequest诶诶哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟= ( httpsepservletrequest )诶诶哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟;
httpsepservletresponse响应 = (httpsepservletresponse) 响应;
Request. SET CHARACTER encoding ( " UTF - 8" ); / / Post submission is valid
" Text / HTML; Character set = UTF - 8 " );
/ /解决方法:扩展HTTP Servlet请求接口的GET parameter方法的功能,以识别GET请求。可以使用动态代理!
httpsepservletrequest云娥= ( httpsepservletrequest )云娥. get class loader ( ),
日日日日日日日日日日日日日日日日日日日日日日日日日日日日至日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日日[ ] http sepservletrequest阿云},
New call handler ( )
/ / ARGS对象数组,表示被调用方法的参数
Public object calls ( object proxies, method methods,
Object [ ] args ) can be thrown
String Method Name = Method. GetName ( );
If ( " GetParameter" ). Equal to ( Method Name ) = )
String value = Request. GetParameter ( Args [ 0 ]
。toString ());
String request method name = request. get method ( );
If ( " get" ). Equal to ( Request Method Name ) ) [ ]
/ /既不空也不空的字符串
If ( value! = Empty &! " " " " "。 Equal to ( value. trim ( ) )
Value = new string ( value
。GetBytes ("iso-8859-1")、"utf-8");
}
}
Return value;
} otherwise
Returns the method. Call ( request, parameter );
}
}
} );
/ /释放(执行下一个过滤器或servlet )
Chain multi-filter ( proxy request, response );
}
梁刘柔芬(滤波组态)伺服接收^ *
}
}
再在网络。XML (可扩展标记语言),可扩展标记语言中配置过滤器和过滤器映射,搞定
4。服务器发送到浏览器的加扰问题
5 .在JSP页面中,中文显示乱码
摘要
在开发过程中,应该注意工作区代码、前端代码、服务器代码和数据库代码的一致性。
造成混乱的原因是错误的字符编码被用来解码字节流,所以当我们思考任何与文本显示相关的问题时,请始终保持清醒:当前使用的是什么字符编码。
领取专属 10元无门槛券
私享最新 技术干货