今天在测试从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。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正常解析,如果使偶数
个数,得到最后字符就是乱码。还有就是如果最后一个字符如果是英文,则就能正常解析,但中文的标
点符号仍出现乱码。权宜之计,如果您的参数中没有中文标点符号,则可以在参数值最后加一个英文符
号来解决乱码问题,得到参数后再去掉这个最后面的符号。也可以凑或使用。

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

  1. php导出excel出现乱码,php导出数据到excel出现乱码的解决办法

    代码如下: 代码示例: /** * 导出数据到excel 解决乱码问题 * Edit www.# */ function xlsBOF() { echo pack("ssssss" ...

  2. jsp mysql 乱码_jsp插入mysql数据库后乱码的解决办法

    jsp 页面用下面3句语句来保证是gbk 编码 数据库连接用如下语句 String sConnStr ="jdbc:mysql://localhost:3306/test?user=mich ...

  3. php 数据库查询乱码,怎么解决php数据库查询乱码问题

    怎么解决php数据库查询乱码问题,数据库,字符集,乱码,操作,简体中文 怎么解决php数据库查询乱码问题 易采站长站,站长之家为您整理了怎么解决php数据库查询乱码问题的相关内容. php数据库查询乱 ...

  4. freetds php mssql 中文乱码,PHP读取mssql json数据中文乱码的解决办法

    PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. ...

  5. php excel导入数据库显示乱码,php修改excel表格数据库数据格式-使用phpexcel导入excel表格数据到MYSQL,乱码怎么解决...

    PHP 用PHPExcel往数据库导入大量数据 估计0是null,所以不显示了,可以换个思路,让他显示为字符串 $number = 0; echo ''.$number 原生PHP代码实现excel导 ...

  6. 测试环境修改数据保存到数据库就乱码情况解决

    问题描述: 在测试环境上,无论修改啥数据到数据库都会乱码.之前测试环境都是正常的,突然坏掉了. 问题定位: 连接测试环境的数据库,创建查询: show variables like '%char%'  ...

  7. 把爬取信息导出到mysql,关于爬虫学习的一些小小记录(四)——爬取数据存入数据库...

    关于爬虫学习的一些小小记录(四)--爬取数据存入数据库 创建数据库 pymysql 模块 具体操作 预知后事如何 前面我们已经讲了怎么访问网页,并且从网页源码中提取数据.既然数据有了,怎样管理就是下一 ...

  8. python爬取微博数据存入数据库_Python爬取微博数据并存入mysql,excel中

    寒假期间做微博数据统计,由于是部门要求,也没办法,自己又是一个懒人,直接用python实现吧.写的很粗糙,也很差,请大家别介意. 总的来说分成两个模块:一个爬取微博数据存入数据库,一个从数据库调取数据 ...

  9. python爬取新闻存入数据库_python爬取数据存入数据库

    昨天本来写了一篇关于python爬取的文章,结果没通过,正好今天一起吧.用python同时实现爬取,和存入数据库,算是复习一下前面操作数据库的知识. 1.准备工作 既然是爬取,那自然要连接到爬取的页面 ...

最新文章

  1. 循序渐进Python3(七) -- 2-- 面向对象进阶
  2. E:VUE 插件 开发与使用 (一)
  3. mysql查看版本号_十分钟了解MySQL事务机制
  4. indesign照片放入太大_照片打印机,小米、华为到底哪家强?
  5. 类与方法java讲解_Java中方法使用的深入讲解
  6. angularjs post返回html_Python 爬虫网页解析工具lxml.html(二)
  7. android最新v7包下载,support v7 appcompat.jar包下载
  8. 公众号运营实用小工具推荐
  9. JAVA流的使用(复制文件效率对比)初学者
  10. ctfshow(菜狗杯)
  11. 如何将linux编译过程中的警告及错误信息输出到文件中
  12. 怎么给旧版本ios装旧版本软件
  13. 解决网卡驱动不可用 Intel(R) Wireless-AC 9462黄色感叹号
  14. 单片机c语言 步进电机,步进电机控制(单片机C语言).doc
  15. 支付宝支付接口开发———在线扫码支付
  16. 聊一聊 C++ 中的 namespace
  17. Qualcomm msm8974 编译
  18. 十六进制颜色码对照表
  19. AndroidStudio3.1 线性布局
  20. XYCMS企业建站系统默认数据库、后台拿WebShell

热门文章

  1. php 二维数组 根据值 找,PHP编程根据二维数组某个字段的值查找值所在的一维数组...
  2. idea 快速导入实现父类方法_网站seo优化方法,实现快速排名!
  3. 计算机考研839,2018年北京语言大学计算机软件与理论839计算机系统与设计之计算机操作系统考研基础五套测试题...
  4. python time库_python中time库的实例使用方法
  5. java贝叶斯分类器 开源_贝叶斯分类器
  6. 使用 PlantUML 绘制时序图
  7. win10专业版虚拟机配置服务器,如何在Win10专业版中添加Hyper-V虚拟机?
  8. 覆盖17类面试题小结
  9. python开发游戏脚本_Python开发游戏开服脚本
  10. MATLAB 检验矩阵中是否有某些元素 对元素统计