美文网首页
Servlet解决中文乱码

Servlet解决中文乱码

作者: 白纸糊 | 来源:发表于2019-01-02 09:53 被阅读0次

中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)

1、请求中文乱码的处理:
--post
  request.setCharacterEncoding("UTF-8");
--get
  String name = new String(“中国”.getBytes(“iso-8859-1”),“UTF-8”)

2、响应中文乱码的处理:
--①字节流:
   设置浏览器默认打开的编码:
    resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
  设置中文字节取出的时候编码.
     “中文”.getBytes(“UTF-8”);
--② 字符流:
   设置浏览器打开的时候的编码
    resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
  设置response的缓冲区的编码
    response.setCharacterEncoding(“UTF-8”);

**简化的写法,
  response.setContentType(“text/html;charset=UTF-8”);

首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的。

一,get请求参数中文乱码的解决办法

对于get请求解决中文乱码有两种途径一种是修改tomcat默认的编码方式为"UTF-8"

在tomcat的server.xml里把

<Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

修改为

<Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

使用这种方式带来的问题是在你本机上这么做没有问题,你无论怎么去修改你tomcat上的配置都没问题,

但是测试环境和生产环境的服务器不是轻易说改就能改的,特别是有些公司的服务器是租赁的,那么在我们

不知道测试环境和生产环境服务器配置的时候就要使用以下的方法来解决get请求的中文乱码问题。

来自页面的一个get请求:

window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("小明"));

服务器端:

String name = request.getParameter("name");
orgname = URLDecoder.decode(name,"UTF-8");

因为get请求的参数在请求行上,我们不能像解决post请求那样使用 request.setCharacterEncoding("UTF-8");这种方式是修改方法体的编码方式。

所以只能使用以上的方式分别对请求行的汉字进行编码和解码。其实解决get请求中文乱码问题最好的方式是避免使用中文,比如上面的name="小明",

如果name是一个恒定值的话,你可以在你的程序里这样写:

window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("xiaoming"));

public static final String NAME = "xiaoming";//定义一个常量

String name = request.getParameter("name");

if(name.equals(NAME)){

name = "小明"

}

如果你必须传中文,而且name这个参数的值是动态的,不断变化的,建议你在数据库里面建立一张表,

让你的中文参数的值都有一个对应的id,在请求发送钱先查一下这张表。

二,post请求参数中文乱码的解决办法

对于post请求,请求中问乱码的两种解决办法,就喜闻乐见了。一般也不会有post请求参数中文乱码吧,认为任何一个java的web项目因该都配置了字符集过滤器吧。

但为了这文章的完整性和以后工作学习方便,我还是把这两种方法贴上来吧。

(1): request.setCharacterEncoding("UTF-8");

(2):

<filter>
        <description>字符集过滤器</description>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <description>字符集编码</description>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
     </filter>
     <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>

相关文章

  • Servlet解决中文乱码

    中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式) 1、请求中文乱码的处理:--post...

  • Servlet过滤器实现统一编码

    在开发 Web 项目时,解决中文乱码问题是不可避免的。在前面所学的知识中,解决乱码的通常做法是在 Servlet ...

  • 解决Servlet中文乱码的问题

    在Servlet中,你的数据获取到了,但是中文是“?”,出现一个输出中文乱码的问题,把下面三行代码加上就可以了 p...

  • sevelet编码问题

    request 一、Post请求 只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问...

  • PHP解决中文乱码

    PHP解决中文乱码

  • cmd中telnet中文乱码

    解决telnet中文乱码问题

  • R 报错解决集合

    fread 读入中文乱码解决

  • Servlet与JSP进阶笔记(二)

    解决中文乱码 web应用的中文乱码 Tomcat默认使用字符集ISO-8859-1,属于西欧字符集 解决乱码的核心...

  • Servlet中文乱码问题

    当在Sevret中嵌入html是使用中文是,运行程序会发现浏览器显示的中文乱码了,此时在Sevret中应该制...

  • Servlet-中文乱码

    前端-提交前处理中文乱码 服务端-对提交的请求编码和解码 服务端-将返回的数据编码和解码

网友评论

      本文标题:Servlet解决中文乱码

      本文链接:https://www.haomeiwen.com/subject/mavalqtx.html