中文乱码问题小结

来源:互联网 发布:下载芒果软件下载 编辑:程序博客网 时间:2024/05/03 12:59

 

    最近在工作中遇到了中文字符乱码问题。整了老长时间才把乱码消除,但对于编码问题还是一知半解的。今天上网查了一些资料。做个小结。希望在以后的编程过程中能顺利解决这类问题。也抛砖引玉,希望同行多多指教。

    一般的转码问题,要么在配置中设置,要么就自己写程序转码。我感觉在编码转换的过程中,主要用到了以下几个函数。

 

 1.getBytes(charset),作用:将字符串按照charset编码方式,并以字节方式表示

 

 public static void test1() throws Exception{
  String te="中文";
  System.out.println(te.getBytes("gb2312"));//4字节
  System.out.println(te.getBytes("unicode"));//6字节
  System.out.println(te.getBytes("iso8859-1"));//2字节
  System.out.println(te.getBytes("utf-8"));//6字节
 }

 

 

 2.new String(bytes,charset) 作用:以charset编码将字节数组重新组合,最后转换为unicode编码存储。与getbyte()作用正好相反。

 

public static void test2() throws Exception{
  String te="中文";
  //utf-8不定长编码,中文用三个字节表示。英文字符用一个字节表示,常用于网络传输。
  String tar=new String( te.getBytes( "utf8" ), "utf8" ) ;
  System.out.println(tar);//"中文"
  //iso8859-1表示的字符很窄,无法表示中文。所以没法对其进行编码。
  tar=new String( te.getBytes( "iso8859-1" ), "iso8859-1" ) ;//
  System.out.println(tar);//"??"
  //双字节编码,英文字符与iso8859-1一致,gbk编码能够表示中文繁体和简体,而gb2312只能表示中文简体。所以gbk表示的范围更广,且兼容gb2312
  tar=new String( te.getBytes( "gbk" ), "gbk" ) ;
  System.out.println(tar);//"中文"
  //java默认编码,定长双字节,也有四字节,包括中文字符。便于计算机计算。
  tar=new String( te.getBytes( "unicode" ), "unicode" ) ;
  System.out.println(tar);//"中文"
 }

 

3.setCharacterEncoding() 函数用来设置http请求或者相应的编码, 对于request,是指提交内容的编码。指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso8859-1编码。但该方法只对post方法有效,对get方法无效。其实也可以通过另一种方法来设置。在tomcat中通过配置文件server.xml来设置,例如::。这种方法对所有的jsp文件都有效,但是没法针对具体的jsp文件进行设置。 对于response,则是指定输出内容的编码方式。与页面中的contenttype效果一样。该设置会传递给浏览器,告诉浏览器输出内容所采用的编码。

 

 

 4.URLEncode.encode()/URLDecode.decode() java本身提供的url编码函数,在编码的时候最好指定值。如果不指定编码方式,系统会按照操作系统默认的方式来编码。因为系统平台的差异,会导致编码结果的不确定。比如对于"中文",当系统默认编码为"gb2312"时,结果是"%4e%2d%65%87",而默认编码为"UTF-8",结果却是"%e4%b8%ad%e6%96%87",后续程序将难以处理。linux下系统默认编码是由运行tomcat时的环境变量LC_ALL和LANG等决定的,建议统一采用utf-8方式来处理

 

第一次写工作小结,感觉没多少思路,不知从何入手。大多是参考一下资料的。以后写的时候还得好好总结,多实践几次,再通过自己的语言表达出来,

 

 参考文献:

字符集编码--问题研究

http://china.manufacturer.com/article/study_for_character_encoding_java.htm

 JSP中的pageEncoding和contentType属性

http://tech.ddvip.com/2007-10/119240756336417.html

原创粉丝点击