java中文乱码解决方法(页面参数 数据库乱码)

  1、jsp教程与页面参数之间的乱码
  jsp获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setcharacterencoding("gbk")或request.setcharacterencoding("gb2312")。
  如果在jsp将变量输出到页面时出现了乱码,可以通过设置response.setcontenttype("text/html;charset=gbk")或response.setcontenttype("text/html;charset=gb2312")解决。
  如果不想在每个文件里都写这样两句话,更简洁的办法是使用servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:
  

web.xml:
  <filter>
  <filter-name>characterencodingfilter</filter-name>
  <filter-class>net.vschool.web.characterencodingfilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>gbk</param-value>
  </init-param>
  </filter>
  <filter-mapping>
  <filter-name>characterencodingfilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
  characterencodingfilter.java:
  public class characterencodingfilter implements filter
  {
  protected string encoding = null;
  public void init(filterconfig filterconfig) throws servletexception
  {
  this.encoding = filterconfig.getinitparameter("encoding");
  }
  public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception
  {
  request.setcharacterencoding(encoding);
  response.setcontenttype("text/html;charset="+encoding);
  chain.dofilter(request, response);
  }
  }
  

2、java与数据库教程之间的乱码
  大部分数据库都支持以unicode编码方式,所以解决java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如microsoft的sqlserver驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql教程驱动:

jdbc:mysql://localhost/webcldb?useunicode=true&characterencoding=gbk。

  3、java与文件/流之间的乱码
  java读写文件最常用的类是fileinputstream/fileoutputstream和filereader/filewriter。其中fileinputstream和fileoutputstream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的filereader和filewriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用filereader和filewriter的父类:inputstreamreader/outputstreamwriter,它们也是基于字符的,但在构造函数中可以指定编码类型:

inputstreamreader(inputstream in, charset cs) 和outputstreamwriter(outputstream out, charset cs)。

  4、其他
  上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决java乱码问题的关键在于在字节与字符的转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我们以前使用resin服务器,使用smartupload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在linux中把resin设置成服务后,上传文件同时的中文参数获取出现了乱码。这个问题困扰了我们很久,后来我们分析smartupload组件的源文件,因为文件上传采用的是字节流的方式,里面包含的参数名称和值也是字节流的方式传递的。smartupload组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在smartupload将字节流转换成字符串时采用了系统默认的编码,而将resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改了smartupload的源文件,增加了一个属性charset和setcharset(string)方法,将upload()方法中提取参数语句:
  

string value = new string(m_binarray, m_startdata, (m_enddata - m_startdata) + 1 );

  改成了
  

string value = new string(m_binarray, m_startdata, (m_enddata - m_startdata) + 1, charset );

  终于解决了这个乱码问题。

时间: 2024-10-17 15:33:51

java中文乱码解决方法(页面参数 数据库乱码)的相关文章

PHP JSON中文乱码解决方法大全

我们知道在使用Ajax技术与PHP后台交互时,中文乱码是常有的事,JSON作为与XML类似的数据交换格式,在PHP用来进行交互时也会出现中文乱码的情况,解决PHP JSON中文乱码的方法思路其实与PHP Ajax传值中文字符乱码的解决方法类似,下面我以教程形式详细介绍下解决PHP JSON中文乱码的方法. 为什么PHP与JSON交互时会出现中文乱码? 由于JSON与JS一样,对于客户端的字符是以UTF8的形式处理,即JSON提交或接受返回的字符是以UTF8形式处理,当与PHP交互时,如果数据库编

jquery的ajax()函数传值中文乱码解决方法介绍_jquery

复制代码 代码如下: $.ajax({ dataType : 'json',type : 'POST',url : 'http://localhost/test/test.do',data : {id: 1, type: '商品'},success : function(data){ } } ); 问题: 提交后后台action程序时,取到的type是乱码 解决方法: 方法一:提交前采用encodeURI两次编码,记住一定是两次 1.修改以下代码 复制代码 代码如下: data:{id:1, t

ajax中文乱码解决方法总结

ajax乱码解决办法一: 在服务器指定发送数据的格式: 在jsp文件中: response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件 或是 response.setContentType("text/xml;charset=UTF-8");//返回的xml文件 PHP:header("Content-Type:text/html;charset=GB2312"); ajax乱码

mysql导入导出数据中文乱码解决方法小结_Mysql

linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码: 复制代码 代码如下: mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql 那么导入数据的时候也要使用-

mysql导入导出数据中文乱码解决方法总结

linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码:  代码如下 复制代码 mysqldump   -uroot  -p  --default-character-set=utf8   dbname tablename  >  bak.sql 那么导入数据

php excel reader2.21导出excel中文乱码解决方法说明

之前我的PHP教程博客访友询问使用php excel reader2.21导出excel时中文出现乱码如何解决,现我说明下php excel reader导出excel中文乱码的解决方法,希望对使用php excel reader导出excel的朋友有所帮助. php excel reader介绍 php excel reader是一个读取Excel xsl文件内容的一个php excel类,目前最新版本是php excel reader2.21,网上可自行搜索,sourceforge上的php

EXP/IMP迁移数据库的时候注释乱码解决方法

                  EXP/IMP迁移数据库的时候注释乱码解决方法 使用 imp/exp 导入/导出 把8I迁移到10G数据时发现导入的数据注释全部都是乱码. 原因是导出的时候客户端字符集没有设置,或者设置不对.修改成DB的就OK了 查了一下字符集(select userenv('language') from dual;) 导出库的字符集是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 导入库的字符集是  AMERICAN_AMERICA.ZHS16GBK

python 中文乱码解决方法

比如我从网上下载一些信息或写个电子邮件程序下载到本地,以记事本(txt) 形式写入并保存在本地计算机,为什么看到只是英文和乱码的?该怎样做呢? 答 乱码原因: 因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了. 解决方法: 在控制台打印的地方用一个转码就ok了,打印的时候这么写: print myname.decode('utf-8').encode('gb

ASP.NET中Request接收参数乱码解决方法

asp教程.net中request接收参数乱码解决方法 asp.net教程 request对象的属性和方法比较多,常用的几个为:useragent 传回客户端浏览器的版本信息,userhostaddress 传回远方客户端机器的主机ip 地址,userhostname 传回远方客户端机器的dns 名称,physicalapplicationpath 传回目前请求网页在server 端的真实路径. 下面进行正题,我的web.config配置文件里配置了全局为"gb2312"编码: <