java乱码处理集中营

由于jdk中只规定了必须有一些unicode utf8 
等编码的实现, 
好像对汉字编码没有什么实现的硬性规定, 
所以有时候就会出现乱码问题。 

数据库访问时的乱码问题,可以数据库连接中加上useunicode =true 以及用gbk 或gb2312编码就可以了  
       在建立数据库时,将数据库中的所有表的编码方式都设置为gbk,原因是JSP中也使用了gbk编码,这样统一的结果是可以减少很多不必要的编码转换问题。另外,在使用JDBC连接MySQL数据库时,连接字符串写成如下形式可以避免一些中文问题: 

jdbc://mysql://hostname:port/DBname?user=username& 
password=pwd& 
useUnicode=True& 
characterEncoding=gbk 

       如果是以数据源的方式连接数据库,在配置文件中使用: 
<parameter> 
<name>url</name> 
<value> 
jdbc://mysql://hostname:port/DBname?&useUnicode=True&characterEncoding=gbk 
</value> 
</parameter> 
       但是,如果使用一个已经存在的数据库,数据库的编码方式是ISO-8859-1,而Web应用中使用UTF-8,且数据库中已经有很多重要信息,因此不能通过更改数据库的编码方式来解决问题。这个时候,在往数据库中写数据库时,一定要在JDBC连接字符串中加入“useUnicode=True&characterEncoding=ISO-8859-1”,这样可以顺利的往数据库中写入正常的数据。但是,在将数据读出数据库时,乱码又会出现,这个时候就应该在数据取出时对其转码,可以将转码功能写为一个函数,具体实现如下: 
public String charConvert(String src){ 
       String result=null; 
   if(src!=null){ 
   try{ 

// 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组->通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。 
          result=new String(src.getBytes("ISO-8859-1"),"gbk"); 
       }catch(Exception e) 
   { 
             result=null; 
             } 
       } 
      return result; 
}       于是,在从数据库读出数据过后调用charConvert(rs.getString("colName")),这样就可以正常显示数据库中的中文数据了。 


JSP中输出中文的乱码问题  
所谓在JSP输出中文,即直接在JSP中输出中文,或者给变量赋中文值再输出等,这种情况下的乱码问题往往是因为没有给JSP页面制定显示字符的编码方式,解决问题如下: 

       ·在JSP页面头部加上语句<%@ page contentType="text/html;charset=gbk"%>(在Servlet页面中使用 

httpServletResponse.setContentType("text/html;charset=gbk")),最好同时在JSP页面的head部分加上<meta http-equiv="Content-Type" content="text/html;charset=gbk"> 

       ·在每次要输出中文的地方主动转换编码方式,比如要在页面中输入“中文”二字,就可以用以下方式: 




<% 
       String str="中文"; 
      byte[] tmpbyte=str.getBtyes("ISO-8859-1"); 
       str=new String(tmpbyte); 
       out.print(str); 
%> 


获取表单提交的数据时的中文乱码问题  

       在没有加任何其他处理之前,用request.getParameter(panamName)获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会出现乱码。出现这种问题的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。 
       比如,建立一个test.jsp,内容为: 
<%@ page contentTyp="text/html;charset=gbk"%> 
<% 
       String str=request.getParameter("chStr"); 
      if(str==null) str="没有输入值"; 
%> 
<html> 
   <head> 
      <title>中文Test</title> 
      <meta http-equiv="Content-Type" content="text/html;charset=gbk"> 
      <meta http-equiv=param content=no-cache> 
   </head> 
   <body>你输入的内容为:<%=str%><br> 
      <form action="test.jsp" method="post"> 
       请输入中文:<input type="text" name="chStr"> 
      <input type="submit" value="确定"> 
      </form> 
   </body> 
</html> 

       运行过后,在输入框中输入汉字“中文”,提交过后再显示出来后就变成了一堆乱码。解决此问题的办法有两个。一是不修改其他设置,只是在将表单中的中文数据取出来过后再转换编码,方法如语句String str=request.getParameter("chStr");String str=new String(sre.getByte("ISO-8859-1"),"gbk"),但这种方法只是从一个局部来考虑问题,如果这样的地方太多,就不得不将这条语句重复写很多次,在比较大的项目中,这是一种不太可行的方案。另一个方法就是让对所有页面的请求都通过一个Filter,将处理字符集设置为gbk。具体的做法如下(在Tomcat的webapps/servlet-examples目录有一个完整的例子,也可以参考其中web.xml和SetCharacter EncodingFilter的配置): 

       首先将%TOMCAT%/webapps/servlets-examples/Web-INF/classes/filters/目录下的文件SetCharacterEncodingFilter.class拷贝到自己应用的/Web-INF/classes/com/util/filter目录下;然后再在web.xml文件的<web-app>后面加上如下配置代码: 
<filter> 
     <filter-name>Set Character Encoding</filter-name> 
     <filter-class>com.ccut.struts.SetCharacterEncodingFilter</filter-class> 
     <init-param> 
        <param-name>encoding</param-name> 
        <param-value>gbk</param-value> 
     </init-param> 
</filter> 
<filter-mapping> 
     <filter-name>Set Character Encoding</filter-name> 
     <url-pattern>/*<url-pattern> 
    </filter-mapping> 


URL中的中文问题
 

       对于直接通过在URL中传递中文参数,如“http://localhost/a.jsp?str=中文”这样的get请求,在服务端用request.getParameter("name")时返回的往往是乱码。按以上的做法设置Filter没有用,用request.setCharacterEncoding("gbk")的方式,仍然不管用。 
             例如,建立test2.jsp文件,内容为: 

<%@ page contentTyp="text/html;charset=gbk"%> 
<% 
       String str=request.getParameter("chStr"); 
      if(str==null) str="没有输入值"; 
%> 
<html> 
      <head> 
         <title>中文Test</title> 
         <meta http-equiv="Content-Type" content="text/html;charset=gbk"> 
         <meta http-equiv=param content=no-cache> 
      </head> 
      <body>你输入的内容为:<%=str%><br> 
      <form action="test.jsp" method="post"> 
         <a href="test2.jsp?chStr=中文">点击这里提交中文参数</a> 
      </form> 
      </body> 
</html> 

       运行后,可见通过URL传递的中文参数取出来过后变成了乱码,造成这种结果的原因是Tomcat中以get方式提交的请求对query-string处理时采用了和post方法不一样的处理方式。 
       解决这个问题的方法是打开Tomcat安装目录下的/conf/server.xml文件,找到Connector块,往其中添加URIEncoding="gbk",添加过后完整的Connector块代码如下: 
<Connector port="8080"               
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="false" redirectPort="8443" acceptCount="100" 
    debug="0" connectionTimeout="20000" 
    disableUploadTimeout="true" 
    URIEncoding="gbk" 
    /> 

在Struts中证实可以解决URI传递乱码问题. 
可以这样做 
1.设定Tomcat的URI编码为"UTF-8":修改%tomcat%\conf\server.xml中的<Connector>在中间加入URIEncoding="UTF-8"; 
2.先在页面上encodeURI(url); 
3.后台代码中直接取出来的中文参数就已经OK了. 
4. 试一试request.setCharacterEncoding("GBK"); 

不过这种方法用在servlet中行不通,在servlet中就必须对URI进行处理,Tomcat中有没有加入URIEncoding都没有差别.



参考资料:http://liuyuru.iteye.com/blog/777323

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值