精华内容
下载资源
问答
  • 最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,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

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

    展开全文
  • 1可以通过代码确认当前jvm运行的编码System.getProperty("file.encoding")此参数...如果在Windows下,file.encoding=”GBK”,如果在Linux下,file.encoding=”UTF-8”。注意:在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方式提交有可能出现的乱码问题。

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

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

     ,如果我在浏览器的地址栏中输入中文参数提交,返回的页面却出现了乱码。真搞不明白到底是哪里出了问题!说起来对中文乱码的问题一直是一支半解,出现乱码了,网上搜罗了一大堆资料,按照网上的配置,问题到是解决了,不过原理却搞的很模糊,一个请求发送到服务器,服务器业务逻辑处理后返回一个页面,这中间涉及的字符集转换,编码,解码过程一概不清楚。这次,折腾了半天,总算是更进一步了解了字符编码问题,这里做个总结。

    先看我的总结,有不对的地方欢迎批评。

    首先我们看下,一个请求响应的流程

    浏览器 IE/FireFox

    ----------->Servlet容器------------------------>显示页面

    编码 使用容器的URIEncoding转码

    解码

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

    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和页面的编码不统一,就需要转码。例如,如果我们采用Tomcat默认的ISO-8859-1,那么当我们使用request.getParameter("yourVariable ")获取表单参数值时其实Servlet就进行了转码,方式为UTF-8-->ISO-58859-1(我的页面charset都是UTF-8),类似于这样

    Java代码 

    newString(变量值.getBytes("UTF-8"),"ISO-8859-1");

    例如表单的username属性以字符串"编辑"提交,那么进入容器后,FormBean中的这个变量会乱码,request.getParameter(username)一样的效果,s1就是request返回的结果,下面是内存快照。

    不过即使这样,我们依然可以使用不恰当的方法显示正常的中文,即逆向转码,例如上面的乱码,我们可以通过ISO8859-1-->UTF-8这种方式还原我们提交时的中文。以下是GBK,UTF-8,ISO-8859-1三者之间互相转换的内存快照:

    我们可以看到,偶数汉字可以在UTF-8,GBK两者中互相转换,而奇数个汉字则不能。综上看来,貌似Tomcat的URIEncoding设置为UTF-8是最好的解决办法,不过这样的设置依然无法解决上面我所说的第三、第四种情况。大家继续向下看。(这里有一点我不确定,就是页面提交至Servlet容器时,是以页面的charset方式编码后直接进入容器,还是以charset转码为ISO-8859-1方式进入,大家有什么见解?)

    2.表单的post提交

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

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

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

    Html代码 

    <%

    Stringusername="编辑";

    %>

    <ahref="hello.do?username=

    分享:

    喜欢

    0

    赠金笔

    加载中,请稍候......

    评论加载中,请稍候...

    发评论

    登录名: 密码: 找回密码 注册记住登录状态

    昵   称:

    评论并转载此博文

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    展开全文
  • 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");都可以使用这个 不论哪里,有乱码就是用

    展开全文
  • 这边主要有两种方式方式一、使用传统的Spring提供的字符编码过滤器(Filter的方式)因为,字符编码过滤器在框架中已经有了,所以我们不需要自己写了。直接进行配置类的实现:@Configuration public class ...
  • 转自:http://blog.sina.com.cn/s/blog_7c76d63901018lyt.html方法一:推荐,不会影响到其它项目见我的另一篇博客:http://www.cnblogs.com/x_wukong/p/3292664.html修改方法:修改tomcat下的conf/server.xml文件,...
  • 由于是部署在Windows环境下,Windows默认编码GBK,这就导致了jvm运行时编码不一致的问题,修改也很容易。解决办法:Linux环境下如果使用的UTF-8编码,可以不用修改,因为Linux默认为UTF-8war包部署在Tomcat修改jvm...
  • 一:form在前台以post方式提交数据: ...应该是Tomcat的问题,然后去修改Tomcat配置文件server.xml,添加URIEncoding="UTF-8" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 然后就好了
  • 3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。 3.1 这种方式并不推荐,因为更改了服务器且并不灵活。 3.2 这么设置后,request的setCharacterEncoding设置什么...
  • String str = new String(request.getParameter("str").getBytes(...这种情况下,只要指定字符串编码就可以了。request.setCharacterEncoding(encode);好,下面说一下我使用过滤器解决传值乱码的例子。首先,写个继...
  • 项目中tomcat设置为utf8解码,当对外的url接口(如ReceiveAction)接收到gbk编码请求时候会自动被tomcat解码为utf8,此时中文直接request.getParameter("content")出来就是乱码,无法直接转换回gbk,怎么转换都是乱码...
  • 技术/@Java讲坛杨33上一篇文章:(一)Tomcat基础:IDEA中搭建Tomcat源码通过阅读它,可以从头到尾搭建Tomcat项目到自己的电脑上,方便学习Tomcat框架中优秀的编码思想。Tomcat是一个轻量级的应用服务器,很多中小型...
  • 好程序员Java学习路线分享实战Tomcat性能优化,前言,由于不同的硬件配置导致默认的tomcat配置无法达到最佳的性能,导致我们需要对tomcat的进行相应的配置调整。Tomcat内存优化配置信息:JAVA_OPTS=’-Xms1024m -Xmx...
  • 什么是字符集在介绍字符集之前,我们先了解下为什么要有字符集。我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制...简单的说字符集就规定了某个文字对应的二进制数字存放方式(编码...
  • Tomcat中文编码配置

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

    2012-09-13 11:09:17
    读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认...
  • IntelliJ IDEA运行tomcat项目编码错误, 及如何指定tomcat编码 刚开始用IDEA, 在跑dubbo开发时, 发现一个很奇怪的问题, 远程调用服务端的方法时, 传入的中文参数会变成GBK编码. 经过好长时间的跟踪终于把问题定位到...
  • idea中的项目的编码格式为GBK 通常这种情况下,我们的控制台输出中文是会出现...我们可以修改tomcat配置文件.tomcat的默认编码格式是utf-8.而windows默认的编码格式为gbk,只需要把tomcat的修改为gbk就可以了; ...
  • Tomcat/JSP中文编码配置

    2015-03-19 14:57:00
    来源:... ... 第一 java源代码文件编码 保存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.cl...
  • 读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。 从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码...
  • Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器常见的 Tomcat 5 表单编码提交后乱码的解决方案有很多, 有改 Tomcat Connector 属性的, 有加过滤器的. 但是 Tomcat 自带的那个过滤器只解决了 POST 方式的乱码却...
  • 常见的 Tomcat 5 表单编码提交后乱码的解决方案有很多, 有改 Tomcat Connector 属性的, 有加过滤器的. 但是 Tomcat 自带的那个过滤器只解决了 POST 方式的乱码却不能处理 GET 方式的乱码. 在这里那...
  • 常见的 Tomcat 5 表单编码提交后乱码的解决方案有很多, 有改 Tomcat Connector 属性的, 有加过滤器的. 但是 Tomcat 自带的那个过滤器只解决了 POST 方式的乱码却不能处理 GET 方式的乱码. 在这里那我就给出一个不...
  • 常见的 Tomcat 5 表单编码提交后乱码的解决方案有很多, 有改 Tomcat Connector 属性的, 有加过滤器的. 但是 Tomcat 自带的那个过滤器只解决了 POST 方式的乱码却不能处理 GET 方式的乱码. 在这里那我就给出一个不...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 277
精华内容 110
关键字:

tomcat编码配置gbk