乱码的处理!程序员永远无法避免的话题 - 1

By | 06月05日
Advertisement

  为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!如果中国的程序员不会遇到乱码,那么只有使用汉语编程。汉语编程是怎么回事我也不大清楚,应该是前年吧,我一朋友给我介绍汉语编程,怎么不错不错?当时因为学习忙没去关注这个,等我闲了,那个朋友不弄这个,问他他也不说不大清楚,最后自己对这个学习也不了了之了。

  今天我写这个不是讲解中英文之间的差距,解码等,我是将我在这几年工作遇到各种各样的乱码的解决方法,总结一样,也希望大家能把自己晕倒解决乱码的方法都说出来,咱们弄一个解决乱码的“葵花宝典”。

  对于Java由于默认的编码方式是 UNICODE,所以用中文也易出问题,常见的解决是

  String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);

  1、utf8解决JSP中文乱码问题

  一般说来在每个页面的开始处,加入:

以下是引用片段:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>

  charset=UTF-8 的作用是指定JSP向客户端输出的编码方式为“UTF-8”

  pageEncoding="UTF-8" 为了让JSP引擎能正确地解码含有中文字符的JSP页面,这在LINUX中很有效

  request.setCharacterEncoding("UTF-8"); 是对请求进行了中文编码

  有时,这样仍不能解决问题,还需要这样处理一下:

  String msg = request.getParameter("message");

  String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");

  out.println(st);

  2、Tomcat 5.5 中文乱码

  1)只要把%TOMCAT安装目录%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。

  2)在你的web.xml里加入如下几行:

以下是引用片段:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.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>

  3)完成.

  2 get方式的解决办法

  1) 打开tomcat的server.xml文件,找到区块,加入如下一行:

  URIEncoding=”GBK”

  完整的应如下:

  

以下是引用片段:
<Connector
port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="GBK"
/>

< p>  2)重启tomcat,一切OK。

  3、xmlHttpRequest中文问题

  页面jsp用的GBK编码

 

以下是引用片段:
 代码
<%@ page contentType="text/html; charset=GBK"%>   
javascript部分
  代码
  
function addFracasReport() {
var url="controler?actionId=0_06_03_01&actionFlag=0010";
var urlmsg="&reportId="+fracasReport1.textReportId.value; //故障报告表编号
var xmlHttp=Common.createXMLHttpRequest();
xmlHttp.onreadystatechange = Common.getReadyStateHandler(xmlHttp, eval("turnAnalyPage"));
xmlHttp.open("POST",url,true);
xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded);
xmlHttp.send(urlmsg);
}

  后台java中获得的reportId是乱码,不知道该怎么转,主要是不知道xmlHttp.send(urlmsg);以后是什么编码?在后面用java来转,试了几种,都没有成功,其中有:

  

以下是引用片段:
代码
  public static String UTF_8ToGBK(String str) {
  try {
  return new String(str.getBytes("UTF-8"), "GBK");
  } catch (Exception ex) {
  return null;
  }
  }
  public static String UTF8ToGBK(String str) {
  try {
  return new String(str.getBytes("UTF-16BE"), "GBK");
  } catch (Exception ex) {
  return null;
  }
  }
  public static String GBK(String str) {
  try {
  return new String(str.getBytes("GBK"),"GBK");
  } catch (Exception ex) {
  return null;
  }
  }
  public static String getStr(String str) {
  try {
  String temp_p = str;
  String temp = new String(temp_p.getBytes("ISO8859_1"), "GBK");
  temp = sqlStrchop(temp);
  return temp;
  } catch (Exception e) {
  return null;
  }
  }

Similar Posts:

  • 英语,程序员永远的痛???——leo网上答疑(15)

    Leo,您好! 我最近在网上阅读了您的文章,看到您给提出问题的初学者很有意义的答复,我也希望得到您的帮助,谢谢. 我是07年毕业的学生,在北京一个还算可以的大学的软件工程专业读了四年,后来来到了外地的一家公司.这家公司主营是数据通信,我的兴趣是Java开发,虽然在这里也有一个部门是搞Java的,也有自己的几套系统,来这一年了,主要做的就是对原有系统的维护. 说实话,原有系统的系统架构十分混乱,基本上没有架构的说法,在开发中我写了一些自己的代码,但因为和现有系统的风格不一致,经常和主管发生矛盾.

  • 英语,程序员永远的痛?

    今天说说,英语的问题,这东西真是程序员永远的痛? Leo,您好! 我最近在网上阅读了您的文章,看到您给提出问题的初学者很有意义的答复,我也希望得到您的帮助,谢谢. 我是07年毕业的学生,在北京一个还算可以的大学的软件工程专业读了四年,后来来到了外地的一家公司.这家公司主营是数据通信,我的兴趣是Java开发,虽然在这里也有一个部门是搞Java的,也有自己的几套系统,来这一年了,主要做的就是对原有系统的维护. 说实话,原有系统的系统架构十分混乱,基本上没有架构的说法,在开发中我写了一些自己的代码,但

  • 程序员永远没有出头之日吗?

    技术人员如果不从事管理,是不是永远没有出头之日呢? 在国内,搞技术也来越不吃香了.人们都想着投身公务员的行列,或是从事商业自己当老板.许多当年好友一谈起自己的技术事业来,就仿佛自己正驾驶着诺亚方舟,意气风发挥斥方遒.然而多年以后,他们纷纷睿智而又深沉地选择了管理,再谈起技术,就仿佛在谈论一艘即将沉没的破船,有些回忆的伤感,可更多的却是幸免于难的庆幸. 在IT业界,这种现象更加明显.作为最低层,程序员们好像已经从白领阶层退居蓝领大军.大家都很迷惘--莫非我们永无出头之日,永远要听别人使唤,永远没有

  • 杰出程序员永远都不会说的几句话---同样适合其他行业

    作为一名软件工程师和一个有着12年经验的项目组领导人,我有很多机会和那些非常有才华的程序员做交流.通过沟通,我发现了一个很有意思的现象,那就是下面这些话几乎从来没有从这些令人膜拜的程序员嘴中说出来过. "我习惯于使用______,但我不知道它是如何工作" 杰出的程序员源于自己的好奇心和不断的探索,这样才掌握了一项项非凡的技能.他们会仔仔细细研究事物运作的原理,即使这些信息可能永远也不会派上用场.目前我们还不知道这种深入挖掘是一种选择意识还是强迫行为,但是这似乎已经成为了所谓人才的特质.

  • 算法是程序员永远都需要学习的

    这一阵子都在看算法的书籍,因为我发现算法其实在编程中非常的有用,我是一名php程序员,大家都说php程序员其实不需要对算法特别熟悉,但是很多人不是不熟悉,而是完全不会,导致在复杂一点的程序面前都不知道使用数据结构,这是我自己之前的体会. 在开发产品的时候觉得有些交互太复杂,获取的数据太多了,但是我立刻就意识到这应该是数据结构可以帮到忙,所以买了一本算法和数据结构的数据,看了一个多月,一遍两遍的看,树中有简单的,又很难的,当然就是没有看懂的,但是没有看懂可以再看一遍,哪里有知识是一看就会的呢 这给

  • 程序员的年龄,没有话题的话题

    作者:Lance Zhang(Lance Zhang's Tech Blog) 出处:http://blodfox777.cnblogs.com/ 在中国,咱们软件行业好像有这么一个潜规则:程序员==吃青春饭的,这使得程序员的年龄问题显得相当敏感,这里我先来讲个故事:(估计不少老牛们都知道,莫笑) 记得是02年吧,.NET刚出来,当时在csdn的水园里一个网友写了这么一个求助帖: 我是一个五十岁的程序员,会BASIC, VB, C, C++, Pascal, ASM, FORTRAN 还会 Ja

  • [置顶] 作为一个程序员我为什么要写博客?

    作为一个程序员我为什么要写博客?从2012-05-22的第一篇博文,到现在累计原创:523篇,转载:182篇,译文:8篇,转载的基本不会占用多少时间,我们来计算一下原创的+译文:这里假设平均写一篇博文需要2小时的时间(通常一篇有质量的博文需要一到两天的时间,甚至更长),(523+8)* 2 = 531 * 2 = 1062 小时,如果按工作日计算,一天工作8小时,1062 / 8 = 132,需要132个工作日,换算为人月的话需要将近7个人月来完成. 这篇博文是在年前就打算写的,但是构思了这么久

  • 一个程序员的顿悟

    从某群里分享的,虽然不知来自哪位大神,分享一下吧. 我算是靠坑蒙拐骗进了程序员的门,然后一路狂奔.26 岁之前几乎没有任何写代码的经验,研究生毕业却意外选择了一家不可能提供培训的初创公司,在每日担忧公司倒闭.害怕被炒鱿鱼以及同事冷落白眼的三重压力下逆流而上,一年半后离职,已是拥有 500 万用户产品的后台主程.从前我对计算机技术心怀畏惧,认定技术高人一定有佛光笼罩,昼夜不息运键如飞日吐代码上万行.现在也算见过一些世面了,回首那段忐忑不安宛如初夜的过程,我却不发觉有任何的励志意味,而是视为一种理所

  • 什么样的程序员是优秀的程序员?

    经常在开发论坛里看到一些准备加入软件开发行列的新人们问同一个问题:如何成为一个优秀的程序员? 那什么样的程序员算是优秀的程序员?这里我谈一下我的理解,欢迎大家拍砖啊: 1.我眼里的程序员应该是一个非常俗的人,了解现实社会的商业.文化.民俗风情,对社会生活抱有极大的热情,而不是哪些不食人间烟火.整天把设计模式.面向对象挂在嘴边却永远不会去实践的人: 2.其次,优秀的程序员应该是一个解决问题的机器,兵来将挡.水来土掩,碰到任何问题都能用合适的技术快速的给出解决方案的人,而不是哪些常常因鄙视非主流技术

  • 程序员好累啊

    一个小问题,够你折腾半天. 天天对着电脑,眼睛永远是熊猫眼 程序员封闭的世界里,缺乏与外界的交流 程序员每天都在超负荷运转,偶尔能休息一下都是莫大的幸福. 但是,这就是程序员. 看到别人玩着苹果,三星,程序员拿着老人机表示不屑一顾. 程序员永远都不喜欢 用鼠标,直接用键盘的快捷键,秒杀全场. 当程序员解决了一个问题事,那种发自内心的舒展,一种flow状态,让你重拾信心. 我是程序员,我骄傲.

Tags: