乱码的问题!程序员永远无法避免的话题

开发 后端
为什么说乱码问题是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!如果中国的程序员不会遇到乱码,那么只有使用汉语编程。

  汉语编程是怎么回事我也不大清楚,应该是前年吧,我一朋友给我介绍汉语编程,怎么不错不错?当时因为学习忙没去关注这个,等我闲了,那个朋友不弄这个,问他他也不说不大清楚,最后自己对这个学习也不了了之了。

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

  对于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"); 
%> 

<%

  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里加入如下几行:

以下是引用片段:
 
Set Character Encoding 
filters.SetCharacterEncodingFilter 
 
encoding 
GBK 
 
 
 
Set Character Encoding 
/* 
 
  3)完成.

  2 get方式解决乱码问题的办法

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

  URIEncoding=”GBK”

  完整的应如下:

  

以下是引用片段:
 port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="false" redirectPort="8443" acceptCount="100" 
debug="0" connectionTimeout="20000" 
disableUploadTimeout="true" 
URIEncoding="GBK" 
/> 
  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;
  }
  } 

【编辑推荐】

  1. 高手Java核心技术学习笔记
  2. 告诉你怎样学Java才是硬道理
  3. 如何获取Sun推出的Java认证
  4. 共同学习Java环境变量
  5. JAVA环境变量的设置
责任编辑:王观 来源: 天极网
相关推荐

2009-03-12 10:29:10

程序员年龄职场

2015-02-27 09:28:22

程序员

2013-07-10 10:30:12

程序员开发

2012-08-07 09:29:09

程序员编程

2018-05-11 15:41:45

IT人老程序员职场

2020-12-07 10:19:01

程序员技术IT

2015-08-20 09:06:48

程序员

2010-06-02 15:51:33

2012-10-09 10:23:07

Linus Torva程序员优秀程序员

2023-01-31 08:16:45

GitHub文件Markdown

2011-04-15 14:10:21

代码程序员

2014-12-11 10:01:09

程序员

2013-08-20 09:33:59

程序员

2009-03-18 13:08:08

程序员新技术焦虑症

2011-05-13 14:34:02

程序员

2023-09-26 01:27:09

AI程序员软件

2018-05-13 15:22:02

程序员职业陷阱

2014-06-06 13:49:01

程序员项目经理

2019-07-23 09:34:27

Oracle程序员数据库

2012-11-22 14:00:26

程序员
点赞
收藏

51CTO技术栈公众号