servlet中文数据存入数据库为乱码的解决办法

今天在测试从web端存入数据到数据库,结果存入数据库的中文数据出现乱码。当然读取出来的时候也是乱码
乱码的原因是tomcat的内部编码格式iso8859-1导致。  而在每个jsp页面设置的utf-8仅仅是该页面显示是用utf-8,而你用form表单提交的数据仍然是iso8859-1.所以要在接受form表单数据的servlet页面加上一行代码request.setCharacterEncoding("utf-8").

为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己查阅。

下面是我找的一些资料和一些总结:http://www.blogjava.net/yaya/archive/2008/10/05/232513.html

2 表单使用Post方式提交后接收到的乱码问题

这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。

A 接受参数时进行编码转换

String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8");这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。

B 在请求页面上开始处,执行请求的编码代码,request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用Stringstr=request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。
这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。

C 为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己查阅。

3 表单get提交方式的乱码处理方式。
如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码/、。

解决办法:
A 使用上例中的第一种方式,对接受到的字符进行解码,再转码。

B Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI="true"属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为utf-8,接受页面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据

<Connector port="8080"

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

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

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

disableUploadTimeout="true" URIEncoding=”UTF-8”/>

里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的。

4 上传文件时的乱码解决

   上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。如果使用apach的上传组件,会发现有很多乱码想象。这是因为apach的先期commons-fileupload.jar有bug,取出汉字后进行解码,因为这种方式提交,编码又自动使用的是tomcat缺省编码格式iso-8859-1。但出现的乱码问题是:句号,逗号,等特殊符号变成了乱码,汉字如果数量为奇数,则会出现乱码,偶数则解析正常。

     解决方式:下载commons-fileupload-1.1.1.jar这个版本的jar已经解决了这些bug。但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码。已经能得到正常所有汉字以及字符。

5 Java代码关于url请求,接受参数的乱码

url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。 如果设定了这个编码格式,则意味着所
有到url的汉字参数,都必须进行编码才可以。否则得到的汉字参数值都是乱码,例如
一个链接 Response.sendDerect(“/a.jsp?name=张大维”);而在a.jsp里面直接使用
String name");得到的就是乱码。因为规定了必须是utf-8才可以,所以,这个转向应该这样写: 
     Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”);才可以。
如果不设置这个参数URIEncoding=”UTF-8”, 会怎么样呢? 不设置则就使用了缺省的编码格式
iso8859-1。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正常解析,如果使偶数
个数,得到最后字符就是乱码。还有就是如果最后一个字符如果是英文,则就能正常解析,但中文的标
点符号仍出现乱码。权宜之计,如果您的参数中没有中文标点符号,则可以在参数值最后加一个英文符
号来解决乱码问题,得到参数后再去掉这个最后面的符号。也可以凑或使用。

时间: 2024-10-17 08:04:16

servlet中文数据存入数据库为乱码的解决办法的相关文章

JSP插入MYSQL数据库后乱码的解决办法

js|mysql|插入|解决|数据|数据库 jsp   页面用下面3句语句来保证是gbk   编码  <%@   page   session="true"   %>     <%@   page   contentType="text/html;charset=gbk"   %>       <%@page   pageEncoding="gbk"%>     <%request.setCharacte

jsp-JSP中将数据存入数据库的时候乱码

问题描述 JSP中将数据存入数据库的时候乱码 5C JSP中将数据存入数据库的时候乱码.将网页的编码方式用GB2312或者UTF-8都是乱码用的是JDBC的连接方式连接的数据库.具体的代码如下第一页gengxin.jsp<%@ page language=""java"" contentType=""text/html; charset=GB2312"" pageEncoding=""GB2312&q

PHP读取mssql json数据中文乱码的解决办法_php实例

PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. 解决办法如下: 这样,sql server 2008中的中文就可以在网页正常显示了. 如果要将中文正常插入到sql server 2008中,还要加入一条代码:$query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文

xml数据存入数据库的解决办法

xml|解决|数据|数据库     当我们要把xml格式的数据存到数据库中.通常的办法是解析xml文件,读出xml中的数据类型并根据它创建数据库表和表之间的结构,读出xml中的数据,存入到数据库之中. 在读nodeType是要注意二个问题: 1.读某个节点数据类型可以对上一个节点的孩子,或直接使本节点的类型,只不过要严格注意定位正确,不要混淆. 例:link.getElementsByTagName("link").item(0).getFirstChild().getNodeType

aspnet-ASP VB 想要把textbox的数据存入数据库 下面是代码 存不进去 也不提示错误

问题描述 ASP VB 想要把textbox的数据存入数据库 下面是代码 存不进去 也不提示错误 Protected Sub Button1_Click(ByVal sender As Object ByVal e As System.EventArgs) Handles Button1.Click Dim p_name1 As String = """" Dim p_type1 As String = """" If p_n

数据进入数据库变乱码

问题描述 数据进入数据库变乱码 <?php if(empty($_GET['submit'])){ ?> <!DOCTYPE html> 商品上架 商品大类: 大众型本院系 商品小类: 书籍工具 商品备注: 商品名: 商品数量: 价格: 联系方式: 上传一张商品照片: <?php }else{ $path="uploadfiles/"; //上传路径 //echo $_FILES["filename"]["type"

无组件图片与文本同步存入数据库的最简单的办法

数据|数据库|无组件 无组件图片与文本同步存入数据库的最简单的办法 动感教育网 发布日期:2001-7-17 字数:4798 一:前言 首先,没有料到图片与文本的上传会引起这么大的注意.上一篇贴子(Id=435906)贴出后,有不少人来信说看不懂.或是仍然不能实现.我就以一种完全简单的手法.完成无组件的文本与图片上传数据库所有过程.希望能帮助所有对此有疑问的网友. 二:准备工作 按照惯例,我先将我的测试环境告诉大家.系统:Win98se + pws + asp 编程环境:Visual Inter

C#中WebClient使用DownloadString中文乱码的解决办法

原文:C#中WebClient中文乱码的解决办法 第一次尝试:  string question = textBox1.Text.ToString(); WebClient client= new WebClient(); client.Encoding = System.Text.Encoding.GetEncoding("GB2312"); Uri uri = new Uri("http://xxxxxxxxxxxxxx"); textBox1.Text =cl

ajax中文乱码各种解决办法总结

 由于XMLHTTP采用的是Unicode编码上传数据,而一般页面采用的是gb2312,这就造成显示页面时产生乱码.而当在获取页面时的XMLHttp返回的是utf-8编码,这就造成了显示产生乱码. 有一种解决办法就是使用encodeURIComponent加上修改 Content-Type 为 application/x-www-form-urlencoded" 来把数据统一编码成 url 格式,当然,也可以指定编码,如:"application/x-www-form-urlencod