精华内容
下载资源
问答
  • javaWeb乱码解决

    2019-09-18 11:22:21
    在doGet()方法的首行加入 response.setContentType(“text/html;charset=UTF-8”);

    在doGet()方法的首行加入
    response.setContentType(“text/html;charset=UTF-8”);

    展开全文
  • Javaweb乱码解决

    2016-05-28 12:38:36
    很好的解决中文乱码问题,这也是新手入门时时常遇到的,只要掌握解决的方法,那乱码已经不成问题啦

    乱码一般会出现在  jsp页面、jsp页面之间相互传参的参数 、与数据库中数据的存取这些地方。

     出现在jsp页面中,是由于没有设置jsp页面的中文字符编码。解决:<% @ page contentType = " text/html;charset=utf-8"   %> 

    出现在jsp页面之间相互传参,是由于参数没有设置正确的字符编码。解决:<% request.setCharacterEncoding( " gb2312 " ); %> 
     以上2个问题解决了,那么存到数据库中,自然就不存在乱码。如果出现乱码,那就是安装数据库的时候我们设置的是默认的编码格式,

    那么,我们修改数据库的编码,网上一般都有相应的修改数据库配置文件的例子,http://www.testwo.com/blog/6930,这是修改MySQL配置文件的链接。

     <% @page pageEncoding = " gb2312 " %> 
    这是为了让jsp编译器能正确地解码含有中文字符的jsp页面。


    还有就是我们写一个过滤器,这个比较方便。

    步骤如下: 1、创建一个类继承Filter接口,实现其中的接口方法,一共三个方法,执行的顺序是;init(FilterConfig arg0)、doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2)、destroy(); 2、配置web。xml文件。这两步完成就可以实现统一编码。 代码如下:

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    //统一编码的过滤器
    public class CharactorFilter implements Filter {
     private String encoding=null;//编码格式
    //将encoding设置为null 
    @Override
     public void destroy() {
      // TODO Auto-generated method stub
      encoding=null;
     }
    //将得到的encoding进行编码
     @Override
     public void doFilter(ServletRequest arg0, ServletResponse arg1,
       FilterChain arg2) throws IOExceptionServletException {
      // TODO Auto-generated method stub
      if(encoding!=null)
      {
       arg0.setCharacterEncoding(encoding);
       arg1.setContentType("text/html;charset="+encoding);
      }
      arg2.doFilter(arg0, arg1);//通过过滤器链arg2将进入下一个过滤器或者直接到页面显示
     }
    //初始化操作,从配置文件中拿到初始化数据
     @Override
     public void init(FilterConfig arg0) throws ServletException {
      // TODO Auto-generated method stub
      encoding=arg0.getInitParameter("encoding");
     }
    }
    在web.xml中应该配置的东西:
    <filter>
      <filter-name>CharactorFilter</filter-name>
      <filter-class>woniu.struts.filter.CharactorFilter</filter-class>
      <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
      </init-param>
     </filter>
     <filter-mapping>
      <filter-name>CharactorFilter</filter-name>
      <url-pattern>/*</url-pattern>//这里使用/*,表示在访问任何页面时都要通过该过滤器
     </filter-mapping>



    展开全文
  • JavaWeb 乱码问题终极解决方案! 整体思路 首先出现乱码之后,要先去确认乱码的地方,当一个网页上出现乱码,有可能是浏览器显示问题,也有可能是 Java 编码问题,也有可能数据库中的数据本身就是乱码的,所以我们要...

    JavaWeb 乱码问题终极解决方案!

    整体思路

    首先出现乱码之后,要先去确认乱码的地方,当一个网页上出现乱码,有可能是浏览器显示问题,也有可能是 Java 编码问题,也有可能数据库中的数据本身就是乱码的,所以我们要做的第一件事就是确认乱码发生的位置,缩小 bug 范围,通过打印日志或者 debug 首先去确认乱码发生的位置,然后再去进一步解决,一般来说,乱码的原因大致上可以分为两类:

    请求乱码
    响应乱码

    请求乱码,可能是因为参数放在 URL 地址中乱码,也有可能是参数放在请求体中乱码,不同传参方案也对应了不同的乱码解决方案。如果是响应乱码,那么原因就会比较多了,一般来说,有如下几种可能的原因:

    数据库本身乱码
    数据在 Java 代码中乱码
    数据在浏览器显示的时候乱码
    数据在从 Java 应用传到数据库的过程中乱码
    

    对于不同的乱码原因,会有不同的解决方案,对症下药,才能药到病除,所以当出现乱码时,大家要做的第一件事就是分析乱码发生的原因,找到原因了,才能找到解决方案。

    基本原则

    发生乱码是因为各自编码不同导致的,所以,大家首先要有一个良好的开发习惯,项目编码,文件编码都要统一起来,一般来说,公司制度稍微成熟一些,都会对项目编码,文件编码有硬性规定的。在Eclipse 中,设置项目编码方式如下(工程的编码要提前设置,如果项目已经开发一半再去设置,已有的中文就会乱码):

    Window->Preferences->General

    在这里插入图片描述

    然后对于 JSP 文件也需要提前设置好编码方式,如下:

    在这里插入图片描述

    这是在 Eclipse 中设置文件编码,如果是在 IntelliJ IDEA中,则不需要设置JSP文件编码,因为默认就是 UTF-8,只需要提前设置下工程编码即可:

    在这里插入图片描述

    除了开发工具的编码,数据库的编码也要统一,一般来说,主要是设置一下数据库的编码和数据表的编码,如下:

    设置数据库编码:

    CREATE DATABASE `vhr` DEFAULT CHARACTER SET utf8;
    

    设置数据表编码:

    DROP TABLE IF EXISTS `adjustsalary`;
    CREATE TABLE `adjustsalary` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `eid` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    这些是准备工作,这些工作做好了,还是有可能会遇到乱码问题,接下来我们就具体问题具体分析。

    请求乱码

    请求乱码,就是说数据在浏览器中显示是正常的,但是传到 Java 后端之后,就乱码了,这种乱码一般来说,分为两种:

    • 参数放在 URL 地址中导致的乱码
    • 参数放在请求体中导致的乱码 两种乱码原因,对应了两种不同的解决方案。分别来看。
    URL 地址中的参数乱码

    这种乱码主要发生在 GET 请求中,因为在 GET 请求中我们一般通过 URL 来传递参数,这个问题可以在代码中解决,但是太过于麻烦,因此一般我们直接在Tomcat配置中解决,修改 Tomcat的conf/server.xml 文件,修改 URL 编码格式,如下:

    在这里插入图片描述

    这样就可以搞定 URL 地址中的参数乱码。

    请求体中的参数乱码

    请求体中的参数乱码,我们可以在解析参数之前通过设置 HttpServletRequest 的编码来解决,如下:

    request.setCharacterEncoding("UTF-8");
    

    但是一样也太过于麻烦,所以如果是普通的 Servlet/JSP 项目,我们就可以直接定义一个过滤器来处理,如下:

    public class EncodingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
    }
    

    过滤器配置:

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.sang.filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    在工程编码和JSP/HTML编码都没问题的情况下,请求乱码基本上就是这两种情况。

    响应乱码

    如果在浏览器上加载页面看到了乱码,大家首先要确认在从服务端往浏览器写数据的前一刻,这个数据还没有乱码(即数据库中查询出来的数据是OK的,没有发生乱码的问题),那么对于这种乱码,我们只需要设置响应数据的 ContentType 就可以了,如下:

    response.setContentType("text/html;charset=UTF-8");
    

    如果从数据库中查询出来的数据就是乱码的,那么就需要去确认数据库中的编码是否 OK 。

    框架处理

    前面提到的方案,都是在 Servlet/JSP 项目中我们可以采用的方案,在 SSM 框架中当然也可以使用,但是,SpringMVC 框架本身也提供了一个过滤器,我们可以借用这个过滤器更加高效的解决响应乱码问题,如下:

    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    当然,上面这段配置并不能代替 Tomcat 中 conf/server.xml 中的编码配置,如果是在 Spring Boot 中,配置可以更加简单,只需要在 application.properties 中添加如下配置即可:

    server.tomcat.uri-encoding=UTF-8
    spring.http.encoding.force-request=true
    spring.http.encoding.force-response=true
    

    其他乱码 其他乱码主要是指使用一些第三方框架导致的乱码,例如使用 Alibaba 的 fastjson,开发者就需要在配置 HttpMessageConverter 时指定编码格式,否则就有可能出现乱码,这种第三方框架的乱码,大伙在使用时需要注意看官方文档,fastjson 的 HttpMessageConverter 配置如下:

    @Bean
    FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        config.setCharset(Charset.forName("UTF-8"));
        converter.setFastJsonConfig(config);
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        return converter;
    }
    

    一个隐蔽的乱码

    除了前面介绍的这几种乱码之外,还有一个比较隐蔽的乱码,容易被很多初学者忽略的地方,就是数据在从 Java 应用传递到 MySQL 的过程中,发生了乱码,这种问题一般在 Windows 上不易发生,如果数据库装在 Linux 上,则这个问题就很容易发生,数据在代码中命名没有乱码,存到 MySQL 上就乱码了,但是如果直接使用 Navicat 等工具往 MySQL 上存储数据,又不会乱码,或者 MySQL 中数据没有乱码,但是用 Java 查询出来就乱码了,这种都是数据在 应用 和 数据库 之间传递时发生了乱码,解决方式很简单,在数据库连接地址上指定编码即可,如下:

    db.url=jdbc:mysql:///yuetong?useUnicode=true&characterEncoding=UTF-8
    

    大致就这些,还有一些非常偶尔的情况可能会用到 @RequestMapping 注解中的 produces 属性,在这里指定数据类型即可。

    好了,差不多就这些,下次有人问你为啥我的又乱码了,直接把这篇文章甩给他。大伙有什么解决乱码的独门密器也可以一起来讨论。

    转载于:https://my.oschina.net/u/4116644/blog/3053886

    展开全文
  • javaweb乱码解决方法

    2012-01-06 22:14:01
    通杀所有java乱码
  • 解决方案:如果使用spring框架 则可以使用编码过滤器,配置如下 encoding org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true 二、项目...

    一、项目使用框架

    解决方案:如果使用spring框架 则可以使用编码过滤器,配置如下

     <!-- 字符编码过滤器 -->
      <filter>
      	<filter-name>encoding</filter-name>
      	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      	<init-param>
      	  <param-name>encoding</param-name>
      	  <param-value>UTF-8</param-value>
      	</init-param>
      	<init-param>
      	<param-name>forceEncoding</param-name>
      	<param-value>true</param-value>
      	</init-param>
      </filter>

    二、项目环境编码与jsp页面页面编码一致

    右键项目-》Properties-》Resource 选择编码  比如选择的编码是UTF-8

    那么jsp页面编码也必须是utf-8

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

    三、servlet获取参数乱码

    这里强调一点,在此使用的tomcat没有经过任何的修改与配置。
    当页面通过两种方式请求Servlet的时候,参数的编码原本为UTF-8,在通过HTTP服务将请求发送出去的时候,会将参数重新按照ISO-8859-1编码后发送。因此,不管GET或POST方式,Servlet接收到的参数数据的编码均为ISO-8859-1,必须重新转码为UTF-8,才能正确显示中文参数。

    1、GET方式的请求与接收过程

    页面中参数“param=中文”的编码原本为GBK,当用GET方式发送参数的时候,参数值会被Web服务器从GBK转码为ISO-8859-1。
    Servlet接收到的GET请求参数的编码当然为ISO-8859-1了,对于中文肯定显示不了,因此要将ISO-8859-1转换为GBK就可以正常显示中文了。
                    String param = request.getParameter("param"); 
                    String x = new String(param.getBytes("ISO-8859-1"), "UTF-8"); 
                    System.out.println("GET方式获取的中文参数值:" + x);
     
     

    2、POST方式请求与接收过程

    页面中参数“param=中文”的编码原本为GBK,当点击页面中提交按钮后,参数会以UTF-8编码格式发送给Servlet,因此Servlet接收参数的时候必须将请求的编码明确设定为UTF-8,这样才能正确接收中文。
                    request.setCharacterEncoding("UTF-8"); 
                    String param = request.getParameter("param"); 
                    System.out.println("POST方式获取的中文参数值:" + param);
     
    或者,可以按照get方式来接收post的参数:
                    String param = request.getParameter("param"); 
                    String x = new String(param.getBytes("ISO-8859-1"), "UTF-8"); 
                    System.out.println("GET方式获取的中文参数值:" + x);
     
     
    疑问:为什么在GET方式下不设定请求的编码格式呢?原因是GET方式使用的编码为ISO-8859-1,用GBK、UTF-8等接收效果都是一样的(都是一堆字母和符号),编不编都一个样,如果指定ISO-8859-1编码是多一翻手续,如果指定了非ISO-8859-1编码,是脑子还不清醒,没搞明白这个原理,因此,GET方式就不要指定请求的编码了。

    四、配置tomcat编码

    修改tomcat  conf文件夹下的server.xml  添加URIEncoding属性

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



    展开全文
  • java的编码原理:java内部使用的是USC2编码(两个字节的Unicode编码),这种编码不属于某个语系的语言编码,他是一种编码格式的世界语,在这个世界上所有可以在计算机中使用...第一种解决方法:(把字符串转换为字节...
  • 从网页得到的数据显示乱码解决方法 (这种方式下,不需考虑应用服务器的设置的编码方式) 页面端发出的数据作两次encodeURI操作, js代码: String username = $(“#username”).val(); var url=“**.action?...
  • javaweb乱码

    2014-07-27 11:43:06
    可以解决 javaweb乱码的完整的 方案
  • JavaWeb 乱码问题终极解决方案!
  • 主要给大家介绍了关于JavaWeb乱码问题的终极解决方案,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaWeb具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • JAVAWEB乱码问题解决

    2013-07-21 17:08:35
    乱码解决方法: public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request....
  • 解决javaweb乱码问题

    2020-11-11 12:21:22
    一次 解决get和set方式的中文乱码问题!!! GenericEncodingFilter package com.yy.filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet....
  • JavaWeb 乱码问题终极解决方案! 经常有读者在公众号上问 JavaWeb 乱码的问题,昨天又有一个小伙伴问及此事,其实这个问题很简单,但是想要说清楚却并不容易,因为每个人乱码的原因都不一样,给每位小伙伴都把乱码的...
  • IDEA乱码+javaweb乱码问题解决方案

    千次阅读 2018-05-29 15:24:14
    最近换了台电脑,重装开发工具,IDEA遇到乱码问题,时间太久忘记怎么去调了,搜索解决方案如下:第一步:修改intellij idea配置文件:找到intellij idea安装目录,bin文件夹下面idea64.exe.vmoptions和idea.exe.vm...
  • 乱码透析
  • javaWEB乱码根源于解决班车一、Servlet中response乱码原因 1. 因为response默认使用ISO-8859-1编码,当我们的servlet在输出过程出现中文。response默认使用ISO-8859-1将中文进行编码,而中文在ISO-8859-1对应的...
  • 今天来讲一下关于解决javaweb乱码出现的原因与解决办法,欢迎大家交流指正。 首先,先明确两个问题,为什么会出现乱码?我们在编写web应用时什么时候会出现乱码? 第一个问题:很多初学者会发现,我们...
  • 一般来说web项目遇到乱码,要先分析错误的来源。我这里使用的Tomcat服务器1.源文件编译格式不同。2.在传输的过程编码格式改变了。3.没有统一编码格式。4.输出方和输入方的编码格式不同。在web项目中乱码一般都出现在...
  • JavaWeb 乱码问题处理

    2019-04-11 11:23:42
    JavaWeb 乱码问题终极解决方案! 整体思路 首先出现乱码之后,要先去确认乱码的地方,当一个网页上出现乱码,有可能是浏览器显示问题,也有可能是 Java 编码问题,也有可能数据库中的数据本身就是乱码的,所以我们要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,874
精华内容 3,549
关键字:

javaweb乱码怎么解决

java 订阅