web编程中出现的中文乱码的解决套路

这段时间做网站又再次的碰到了老掉牙的中文乱码问题,实在是揪心啊,感觉一点进步都没有,每次解决了下次又出现了。这次下定决心想授人以渔而不是鱼了。

 

解决这个问题的万金油当然是按照乱码从生成到结束的整个过程着手分析,以下是流程分析:

  1. 源头在数据库,首先你要保证你在数据库中搜出来的结果不是乱码;如果是乱码,那么必然你数据库的字符集没有改为需要的中文字符集,例如mysql,这时候较为简单只需要在my.ini或my.cnf中改下就可以了;
  2. 这个时候,servlet容器访问数据库,把字符读取过来,那么第二个就是jdbc驱动了,这步一般不会有问题,经验上告诉我也没有碰到过啥问题;
  3. 如果用持久层框架的话,例如ibatis,就要小心它那边有没有对从数据库里取出来的东西转码的可能了,取出来本来是中文正常的,结果ibatis用啥latin1一转又出问题了。如果问题出在这里,有个比较容易的调试办法,就是打日志,这种持久层框架一般都可以在debug级别打出真正和数据库交互的sql语句,同样也会打出从数据库拿到以后的字符,如果这时字符时乱码,说明问题在这里出现了,需要改对应持久层框架的字符编码方式了;
  4. 服务器端渲染层,例如你如果使用velocity的话,就需要对输出的内容进行渲染,而渲染的时候,velocity也有可能改变你的编码,将原本好好的utf8改成万恶的latin1。而原本自带的apache-velocity确实是默认为英文环境的,所以如果你不把velocity.properties文件加到对应的WEB-INF/下,那么显示出来的永远是乱码;
  5. 浏览器端渲染层,这个也是网上说的最多的,如果浏览器端这边都不是以中文编码显示的话,前面各部分所做的任何努力都付诸流水了。即:<meta http-equiv =Content-Type content ="text/html; charset=utf8" >

现在终于知道为什么字符集问题困扰了这么多人,主要是他出错的机会实在是太高了,以上的这5条完全只是本人经验,随着应用的复杂,中文乱码问题出错的几率会更大,谁叫我们的技术比别人落后呢,规范都被他们定去了。

 

你可能感兴趣的:(编程,Web,框架,ibatis,velocity)