手机网站维护费,个人页面模板,企业互联网营销推广方案,wordpress菜单栏下拉1.字符乱码出现的原因#xff1a; 出现乱码是由于数据在传递和接受过程中字符编码格式不一致导致的。 for examples: 输入11--在2进制中代表的是3--在8进制中代表的是9--在16进制中代表的17在这里同样输入的都是11#xff0c;但是由于进制的不一样#xff0c;所… 1.字符乱码出现的原因 出现乱码是由于数据在传递和接受过程中字符编码格式不一致导致的。 for examples: 输入11--在2进制中代表的是3--在8进制中代表的是9--在16进制中代表的17在这里同样输入的都是11但是由于进制的不一样所以代表的值也不一样。 同理编码在底层都是一串字节码由于编码格式的不同比如以UTF-8编码格式进行编码以iso8859-1编码格式就无法进行解析所以所展现出来的字符串就不是原先的字符串了。 2.字符乱码的解决方式 2.1将乱码先进行编码在进行解码不管是get请求还是post请求都适用 String userCount User.getUserCount();
//将乱码字符串按照错误的编码格式转换为原始的字节码序列
byte[] bs userCount.getBytes(iso889-1);
//将原始的字节码序列使用正确的编码格式进行编码转换为正确的文字
userCount new String(bs,utf-8);2.2使用spring框架构建项目的话可以使用编码过滤器post请求方式 在web.xml中添加 filterfilter-nameencoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class/filterfilter-mappingfilter-nameencoding/filter-nameservlet-namespringmvc/servlet-name/filter-mappingservlet-namespringmvc/servlet-name说明只要请求被前端控制器拦截到就会执行这个名称为encoding的filter。 CharacterEncodingFilter的源码如下 public class CharacterEncodingFilter extends OncePerRequestFilter {/*设置了两个属性encoding和forceEncodingencoding代表的是编码格式forceEncoding表示是否启用*/private String encoding;private boolean forceEncoding false;public CharacterEncodingFilter() {}public void setEncoding(String encoding) {this.encoding encoding;}public void setForceEncoding(boolean forceEncoding) {this.forceEncoding forceEncoding;}protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {/*当编码格式不为空以及forceEncoding为true时那么设置就将服务器端的编码格式设置为配置文件中设置的编码格式*/if (this.encoding ! null (this.forceEncoding || request.getCharacterEncoding() null)) { //只能修改请求体中编码方式request.setCharacterEncoding(this.encoding);if (this.forceEncoding) {response.setCharacterEncoding(this.encoding);}}filterChain.doFilter(request, response);}
} 所以需要在web.xml中设置encoding和forceEncoding的初始化值 filterfilter-nameencoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-paraminit-paramparam-nameforceEncoding/param-nameparam-valuetrue/param-value/init-param/filterfilter-mappingfilter-nameencoding/filter-nameservlet-namespringmvc/servlet-name/filter-mapping 2.3如果是本地的项目的话可以在tomcat的配置文件server.xml中修改编码格式 (get请求 Connector URIEncodingUTF-8 port8080 protocolHTTP/1.1connectionTimeout20000redirectPort8443 /在server.xml配置文件下添加属性URIEncodingUTF-8 总结字符乱码问题需要分get请求和post请求。 转载于:https://www.cnblogs.com/wsxdev/p/11432122.html