精华内容
下载资源
问答
  • 不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。 1 package ...

    一:form在前台以post方式提交数据:

    浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。

    package com.yyz.request;

    import java.io.IOException;

    import java.io.PrintWriter;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    //以post方式提交表单

    public class RequestDemo extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    //请求数据的中文乱码问题

    request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8

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

    //获取数据正常,输出数据时可以查阅不同码表

    response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表

    response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开

    PrintWriter out = response.getWriter();

    out.write(username);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    doGet(request,response);

    }

    }

    二:form在前台以get方式提交数据:

    get方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。

    1 package com.yyz.request;

    2

    3 import java.io.IOException;

    4 import java.io.PrintWriter;

    5

    6 import javax.servlet.ServletException;

    7 import javax.servlet.http.HttpServlet;

    8 import javax.servlet.http.HttpServletRequest;

    9 import javax.servlet.http.HttpServletResponse;

    10 //以get方式提交表单

    11 public class RequestDemo extends HttpServlet {

    12

    13 public void doGet(HttpServletRequest request, HttpServletResponse response)

    14 throws ServletException, IOException {

    15 //请求数据的中文乱码问题

    16 request.setCharacterEncoding("UTF-8");//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1

    17 String username = request.getParameter("username");

    18 System.out.println(username);

    19 byte source [] = username.getBytes("iso8859-1");

    20 username = new String (source,"UTF-8");

    21 System.out.println(username);

    22

    23 }

    24

    25 public void doPost(HttpServletRequest request, HttpServletResponse response)

    26 throws ServletException, IOException {

    27 doGet(request,response);

    28 }

    29

    30 }

    三:提交数据中文乱码问题总结:

    1.如果提交方式为post,想不乱码,只需要设置request对象的编码即可。

    注意:客户机数据是以哪种方式提交的,request就应该设成什么编码。

    2.如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。

    String data = "???????";//乱码字符串

    byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据

    data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码

    //等同于

    data = new String (source,"UTF-8");

    3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。

    3.1

    这种方式并不推荐,因为更改了服务器且并不灵活。

    3.2

    这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。

    四:最后的最后,提一个小细节:URL地址后面如果跟了中文数据,一定要经过URL编码。表单提交的参数有中文数据,浏览器会自动帮我们编码,但如果是通过链接直接带中文参数,浏览器是不会帮我们编码的,这时想通过上述第二种方式解决中文乱码问题就时灵时不灵了,应该通过URLEncoding.encode(,"UTF-8")先编码。

    新配置一个spring的MVC项目,发现对Get请求的中文参数出现了乱码:

    查看了SpingMVC中关于编码的配置(在web.xml中),如下

    encodingFilter

    org.springframework.web.filter.CharacterEncodingFilter

    encoding

    utf-8

    forceEncoding

    true

    encodingFilter

    appkit

    应该不是Spring的问题,应该是Tomcat的问题,然后去修改Tomcat的配置文件server.xml,添加URIEncoding="UTF-8"

    connectionTimeout="20000"

    redirectPort="8443"

    URIEncoding="UTF-8"/>

    然后就好了

    展开全文
  • tomcat编码设置tomcat中文问题的解决第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。从.java->.class过程是,先编写.java文件并按莫种编码...

    tomcat的编码设置

    tomcat中文问题的解决

    第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。

    从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。

    从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。

    第二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是eclipse的聪明之处。

    第三,

    pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致(所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet。

    contentType="text/html;charset=UTF-8"表示当浏览器得到此文件时以什么方式解码。例如:

    test

    我是个好人

    会产生乱码,因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。

    至此,页面应为:

    中文问题

    第四,

    request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8

    response.setCharacterEncoding("UTF-8")可以把页面中的换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

    第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。

    1,post提交的数据:

    程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.

    encodingFilter

    org.springframework.web.filter.CharacterEncodingFilter

    encoding

    UTF8

    forceEncoding

    true

    encodingFilter

    *.html

    encodingFilter

    *.jsp

    因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.

    特别注意:

    a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);

    在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放.

    b,在server.xml中不能加上

    这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过.

    如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal([url]http://www.ethereal.com/[/url])

    2,get提交的数据:

    两种情况:

    a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用

    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")

    取出

    b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的

    content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中:

    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

    enableLookups="false" redirectPort="8443" acceptCount="100"

    debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"

    disableUploadTimeout="true" />

    加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.

    如果content="text/html; charset=GBK",需用

    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")

    取出,其他情况类似.

    总结:

    1,所有页面使用utf8编码,

    2,服务器加上过滤器,

    3,server.xml中不要使用

    4,server.xml文件加上useBodyEncodingForURI="true"

    这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求

    从这里输入.

    第六,连接数据库

    1、mysql配置文件:

    修改mysql在windows\my.ini里default-character-set=utf-8

    2、mysql里数据库和表也都设为utf8_unicode_ci

    3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8

    注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&

    对于Web容器来说,如果你不设置,默认是ISO8859-1

    String des = new String(s.getBytes("iso8859-1"),"UTF-8");都可以使用这个 不论哪里,有乱码就是用

    展开全文
  • 1可以通过代码确认当前jvm运行的编码System.getProperty("file.encoding")此参数是在jvm启动的时候就已经设置完成。如果没有手动设置file.encoding,会根据当前系统的...注意:在Tomcat启动完成后,在程序中通过设置...

    1 可以通过代码确认当前jvm运行的编码 System.getProperty("file.encoding")

    此参数是在jvm启动的时候就已经设置完成。如果没有手动设置file.encoding,会根据当前系统的编码指定。

    如果在Windows下,file.encoding=”GBK”,

    如果在Linux下,file.encoding=”UTF-8”。

    注意:在Tomcat启动完成后,在程序中通过设置system property的方式是没有效果的,原因是jvm启动时读取file.encoding并cache,后续只使用启动时读取的编码。

    修改jvm编码

    Linux环境

    在catalina.sh配置

    JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"

    Windows环境

    在catalina.bat配置

    set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8

    原文:https://blog.csdn.net/xinluke/article/details/51490048

    展开全文
  • 最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下:1....

    最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF

    -8,具体配置如下:

    1.所有页面的charset设置为UTF-8。

    2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题(但是浏览器在地址栏中的中文编码默认是gbk不是页面的

    charset)。

    3.添加过滤器,调用request.setCharacterEncoding("utf-8")方法将request的字符集设定为utf-8,解决请求以post方式提交的乱码问题。

    其实这样的设置貌似是不会再出现乱码问题了,不过,问题依旧来了!

    我把用户发送请求方式不同引起的中文问题划分了四种类型:

    1、表单的get提交

    2、表单的post提交

    3、页面链接传递中文参数

    4、地址栏中参数直接输入中文提交

    1.首先我们看表单get方式提交

    浏览器根据页面的charset编码方式对页面进行编码,然后提交至服务器,首先进入对应的字符编码过滤器(如果有的话),不过Tomcat6.0对于get提交方式采用的是server.xml文件中的

    URIEncoding编码方式,而并不会采用过滤器中设置的编码,那么根据我的环境设置,jsp页面都使用UTF-8的编码,Servlet容器的URIEncoding也设置为UTF-8,则servlet不用进行转码即可正确解码,获

    得正常的中文字符串。那么,响应页面的中文因为页面的统一编码(UTF-8)自然也会正常显示。当然,如果我们Tomcat的URIEncoding设置为其他非UTF-8的编码方式时,页面的内容进入Tomcat解析时,因

    为Tomcat和页面的编码不统一,就需要转码。

    2.表单的post提交

    对于这种方式的请求,request.setCharacterEncoding("一般来自于web.xml中过滤器设置的参数")方法进行编码设置将会产生作用,struts的表单提交方式默认为post方式,那么按照上面我的环境设置

    ,页面,容器,都采用UTF-8编码方式,就不会产生中文乱码问题。

    3.页面链接中传递中文参数

    我虚拟一个这样的场景,请求页面中有如下代码

    String username = "编辑";

    %>

    页面中链接传递中文

    对于这种方式,我们需要先将参数使用统一的编码方式编码,将编码后的字符放入链接,这里我对参数以UTF-8方式编码,如下

    String username = java.net.URLEncoder.encode("编辑","UTF-8");

    %>

    那么这样我们也不会产生中文乱码问题

    4.地址栏中参数直接输入中文提交

    例如浏览器地址栏中输入"http://localhost:8080/helloapp.do?username=编辑"提交,对于这种方式,浏览器不会采用页面的charset方式对URL中的中文进行编码后提交至服务器(IE,FireFox都一样),

    而是采用系统的GBK转码为ISO-8859-1之后提交至Servlet容器,那么,如果对于前三种方式我们所做的设置,在这里就有问题了,因为进入容器时中文进行了GBK至ISO-8859-1的转码,而之前我们的

    Servlet容器URIEncoding设置为UTF-8,当我们使用request.getParameter("username")时,相当于又进行了这样的流程GBK--&gtISO-8859-1--&gtUTF-8

    综上,对于乱码问题,前三种方式是一般用户的请求方式,第四种属于非正常途径的请求方式,对于这种方式产生的问题我认为无法很好的解决,也不需要解决。

    展开全文
  • 最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下:1....
  • 项目中tomcat设置为utf8解码,当对外的url接口(如ReceiveAction)接收到gbk编码请求时候会自动被tomcat解码为utf8,此时中文直接request.getParameter("content")出来就是乱码,无法直接转换回gbk,怎么转换都是乱码...
  • tomcat编码设置

    千次阅读 2013-11-24 15:30:50
    读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码...
  • tomcat 启动编码设置

    2019-10-09 17:56:02
    参考地址 ... 打开tomcat/conf/logging.properties 找到java.util.logging.ConsoleHandler.encoding = UTF-8 修改为java.util.logging.ConsoleHandler.encoding = GBK ...
  • tomcat设置URL编码

    千次阅读 2014-01-03 11:05:52
    要想更改tomcat默认的URL编码格式“ISO-8859-1”为自己想要的格式,例如“UTF-8”、“GBK”等等,方法很简单:到tomcat安装目录下----->conf----->server.xml,用编辑器打开文件,ctrl+f,查找Connector,会找到一个...
  • Tomcat编码设置

    2013-04-24 21:24:48
    赠人玫瑰,手留余香.人生最大的快乐不在于占有什么而在于追求什么的过程. ... ...tomcat中文问题的解决 ...读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过
  • tomcat设置文件编码

    2014-02-27 15:55:00
    tomcat修改bin文件夹下面的catalina.bat文件可以解决乱码在文件中加上JAVA_OPTS="-server-Xms128M-Xmx4096M-XX:PermSize=512M-XX:MaxPermSize=1024m-Dfile.encoding=UTF-8" ...URIEncoding="GBK" 转...
  • 项目中tomcat设置为utf8解码,当对外的url接口(如ReceiveAction)接收到gbk编码请求时候会自动被tomcat解码为utf8, 此时中文直接request.getParameter("content")出来就是乱码,无法直接转换回gbk,怎么转换都是...
  • 设置tomcat容器 编码格式

    千次阅读 2012-02-03 10:49:52
    当我们在实用tomcat 做容器时!如果我们要的参数是通过热连接的形式传参数是会乱码的!(如果有中文) ...这里tomcat 里面要设置编解码格式;如 gbk gb2312 iso-8859...设置tomcat 编码格式    maxThreads="150
  • Tomcat编码设置

    2012-11-28 09:56:52
    读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码...
  • 做项目的时候,对方所有接口都是以GET方式发送GBK进行URLEncode之后的参数,例如: http://127.0.0.1/zmall/addSupProduct.do?name=%ca%a2%b4%f3-%c8%c8%d1%aa%b4%ab%c6%e6-%b0%b4%d4%aa %b3%e4&partnerId=1034&par...
  • 读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码...
  • 读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码...
  • 如果操作系统配置文件编码不是你需要的,你又不能更改配置,那么可以在tomcat启动文件中设置编码。 例如: 在catalina.sh 头部加入 LC_ALL="zh_CN.GBK" LANG="zh_CN.GBK" ...
  • Windows默认GBK编码 而Tomcat默认utf-8 所以要给Tomcat设置编码GBK 打开config文件logging.properties用记事本打开 51行设置如下: java.util.logging.ConsoleHandler.encoding = gbk
  • Tomcat的server.xml的Connector部分添加URIEncoding="GBK",如下:server.xml添加后内容如下:   <Connector URIEncoding="GBK" port="8080" maxThreads="150" ...
  • 解决tomcat编码乱码

    2021-04-29 17:18:52
    由于windows的编码默认为gbk所以将tomcat日志编码设置gbk 操作如下 打开tomcat的config目录 编辑logging.properties,将 java.util.logging.ConsoleHandler.level = FINE java.util.logging....
  • [color=red] 项目中tomcat设置为utf8解码,当对外的url接口(如ReceiveAction)接收到gbk编码请求时候会自动被tomcat解码为utf8, 此时中文直接request.getParameter("content")出来就是乱码,无法直接...
  • file.encoding跟操作系统默认字符集有关,Windows下默认的是GBK,但我们程序一般IO流中字符编码一般都设置的是utf-8,这样会导致中文乱码。因此需要修改file.encoding为UTF-8.如果应用容器是tomcat,可参考如下修改...
  • tomcat配置编码中文

    2012-09-13 11:09:17
    读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认...
  • Tomcat中文编码配置

    千次阅读 2011-01-30 15:04:00
    读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 355
精华内容 142
关键字:

tomcat设置编码gbk