java hssfworkbook 乱码_java各种乱码汇总

1.Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。 ContentType属性指定响应的 HTTP内容类型。如果未指定 ContentType,默认为TEXT/HTML。 下面的示例将 ContentType 属性设置为其他的常见值。 2.pageEncoding是jsp文件本身的编码

contentType的charset是指服务器发送给客户端时的内容编码

JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。

第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。

第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。 3.对字符串进行编码和解码: 1.String str = "张三" ;   2.byte[] jiema= str.getBytes("gb2312") ; //解码   3.String   bianma = new String(jiema,"UTF-8");//编码 如果上面的解码不对 可能出现问题   解码这个必须知道是什么码才能解了,页面ajax传值的编码是iso8859-1 3.请求响应的编码request.setCharacterEncoding("utf-8"); 4.response.setContentType("text/html;charset=utf-8"); 5.关于ie文件上传的文件名乱码问题,解决办法: fileName = java.net.URLEncoder.encode(fileName, "ISO-8859-1");可以设置成ISO-8859-1编码解决。 6.转码 String name = request.getParameter("name")==null?"":URLDecoder.decode(request.getParameter("name"),"utf-8");//分类名称

get请求中文参数乱码 clickValue = URLDecoder.decode( (new String(req.getParameter("clickValue").getBytes("ISO8859-1"), "UTF-8")), "UTF-8"); 7.乱码问题 1.var name=document.myForm.username.value;   2.var url="Ajax.do?method=check&name="+encodeURI(encodeURI(name));   3.xmlHttp.open("GET",url,true);   4.action中   5.String name = request.getParameter("name");   6.name = URLDecoder.decode(name, "UTF-8");   7.//servlet返回数据时,将字符编码设置为utf-8就可以了,因为Ajax只支持utf-8   8.response.setContentType("text/xml;charset=utf-8");   9.PrintWriter out = response.getWriter();   10.out.print(result);

7.处理请求参数传递编码问题:

java中编码:URLEncoder.encode(strUri,"utf-8"); java中解码码:URLDecoder.decode(strUri,"utf-8"); 8.js中编码: encodeURIComponent(strUri);encodeURI(strUri);escape(str); js中解码: decodeURIComponent(strUri);decodeURI(strUri);unescape(str);

9.各种情况的乱码 jsp与页面参数之间的乱码 强制指定request获取编码的方式:request.setCharacterEncoding(“GBK”) 如果jsp输出到页面出现乱码:response.setCharacterEncoding(“GBK”) 或者在web.xml中配置servlet过滤器filter web.xml: CharacterEncodingFilternet.vschool.web.CharacterEncodingFilterencodingGBKCharacterEncodingFilter/* 10.2.java与数据库之间的乱码 直接使用unicode与数据库进行交互,可以在驱动的url中指定,如mysql驱动: Jdbc:mysql://localhost/SRC?useUnicode=true&characterEncoding=GBK 3.java与文件流之间的乱码 FileInputStream/FileOutpuStream是基于字节流(byte)的,常用于读写二进制文件。 FileReader/FileWriter是基于字符(char)的。这两个类的构造函数默认使用系统的编码。 使用它们的父类InputStreamReader/ OutputStreamWriter可以指定编码类型。 InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs) 四、解决乱码问题的注意事项   1.一个新的系统,从页面到数据库再到配置文件,建议统一使用UTF-8 2.setCharacterEncodingFilter只对post请求有效,get一律忽略 3. JavaScript和Ajax乱码的避免,注意JavaScript默认是ISO8859的编码,避免JS/AJAX乱码和GET一样,不要在 URL里面使用中文,实在避免不了,就只能在生成链接的时候转码,绝对不能想当然的认为SetCharacterEncodingFilter会帮你做什 么事情。 4. 如果在本项目中采用了get方式提交请求并附加参数,结果导致编码乱码,原因是Tomcat默认请求编码是ISO8859,需要在Tomcat的配置文件 server.xml添加一个参数,URIEncoding=”UTF-8”,这样请求中附件的参数就会以UTF-8来进行编码。 5.Ajax请求乱码 使用Ajax,JS也是默认使用ISO8859编码,所以在进行请求时遇到中文参数需要进行编码,如:var url = "GetSelectListAction.do?queryData=subTrade" + "&queryId=" + encodeURI(obj.value) + "&r=" + Math.random();这里有两个地方需要注意:第一个地方是encodeURI(),方法,可以将参数进行转码,默认是转化为UTF-8,如果需要转为其他码制,需要在方法中添加第二个参数。第二个地方是Math.random(),由于Ajax有缓存机制,在接受请求的时候第一时间先判断该请求的地址是否被访问过,如果被访问过则 直接使用缓存中的内容返回,这个东西很讨厌,客户在访问过一次出错后以后每次出现的都是这个错误,所以在请求中给其增加一个时间戳,只要可以随机生成一个 不同的字串就可以,保证Ajax每次都去访问服务器。 5.超长汉字Get乱码 超长的汉字做为参数传递仍然会出现乱码问题,解决方法是采用java.net.URLEncoder的 Encode方法强制转码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值