主页 > 焦点科技 >气瓶检测_如何解决WEB应用中文乱码问题 >

气瓶检测_如何解决WEB应用中文乱码问题

如何解决WEB应用中文乱码问题
给头部head里边
web程序网页出现乱码的原因分析什么是字符编码
字符
就是字符的二进制编码方式
,
同一个字符
用不编码方式时
二进制据不同的,用一种编码方式时展现另一种编码方式的文字时
会出现对应的另一符,
这就是乱码了,
要是网页不出现乱码
至少要做到
编码统一
1
服务器端网页文件
要统一使用一种编码;
2
文件头要声明这个网页是使用何种编码的,
而且与存储的文件编码相同;

header("Content-Type:
text/html;
charset=utf-8");
3
浏览器一般能识别,这个声明若不能识别
说明
第二步的声明有错误或者浏览器不能理解;
4
最重要一点
如果使用的数据库
,
数据库的编码也要一致;
5,
容易忽略的
一点
,
如果
windows
系统使用了中文文件名是用的是GBK

如果你的网页文件不使用GBK
引用文件名
目录名时
一定要转码;
如何解决JavaWeb乱码问题

request-lineURL部分必须以application/x-www-form-urlencoded方式编码。编码时使字符集是当前网页在浏览器上显示时用的字符集。JDK中专门有类处理application/x-www-form-urlencoded类型的数据,它们是URLEncoder及URLDecoder。当网页上的数据需要手动进行URLEncoding处理时,可使用URLEncoder类完成编码工作。需要手动进行URLEncoding处理的位置包括:链接()中的href标签属性;以POST方式提交的表单(

)中的action标签属性。例如,网页上不应该产生这样的链接:[xhtml]view plaincopy使用者身份验证"正确的写法是:[xhtml]view plaincopy使用者身份验证为此,方案之一可以在JSP网页上使用脚本化语言进行URLEncoding处理。如:[xhtml]view plaincopy<%@pageimport="java.net.URLEncoder"%>">使用者身份验证request-body的编码处理request-body只有在POST提交的方式下才会产生。request-body的编码方式由表单的enctype标签属性指定,同request-line一样,编码request-body时使用的字符集也是当前网页在浏览器上显示时所使用的字符集。request-body的编码过程由客户端浏览器自动完成,不需要额外的编程处理。服务器的处理相对于用户端,服务器端在接收到HTTP请求时提供了两种处理请求数据的方式:自动处理与不处理。
服务器一般会自动处理application/x-www-form-urlencoded类型的数据(包括request-line及request-body中的数据),就servlet(Servlet类或JSP网页)而言,可以通过request对象的getParameter()或getParameterValues()取得这些数据。对于除此以外的其它MIME类型的数据,HTTP服务器则是将处理的过程直接交到了与HTTP请求相对应的servlet(Servlet类或JSP网页)身上。
例如用户端有以下表单被提交:[xhtml]view plaincopy表单提交时经服务器端自动处理后与checkUser.html相对应的servlet(Servlet类或JSP网页)可以通过下面的方式取得数据:[java]view plaincopyStringopt=request.getParameter("opt");String[]users=request.getParameterValues("username");默认情况下,服务器对于接收到的application/x-www-form-urlencoded类型数据进行字符集为ISO-8859-1的URLDecoding处理,经过处理之后的字符串内码为ISO-8859-1。对于没有附加任何设置的HTTP服务器而言,我们的servlet在取得数据之后必须进行相应的解码处理,生成内码为UTF-16(unicode)的字符串。
例如对于用户端请求数据中以UTF-8字符集进行URLEncoding的数据,servlet需要进行如下方式的解码:[java]view plaincopyStringopt=request.getParameter("opt");if(opt!=null&&!"".equals(opt)){opt=newString(opt.getBytes("ISO-8859-1"),"UTF-8");}为了避免这种额外的编码/解码处理,也就是说让服务器了解到用户端在URLEncoding时所使用的字符集,从而直接进行相应字符集的URLDecoding处理,不同的HTTP服务器提供了不同的解决方案。
以Tomcat为例,Tomcat自动解码request-line的处理方式由Tomcat的配置文件server.xml指定。在server.xml中的Connector标签中提供了URIEncoding标签属性,只要为其指定解码用的字符集,Tomcat就会自动解码request-line中经过application/x-www-form-urlencoded编码处理的数据。例如:URIEncoding="UTF-8" redirectPort="8443"/>Tomcat自动解码request-body的处理方式是设置request的characterEncoding值。如:request.setCharacterEncoding("UTF-8");但是这一操作必须提前在filter中完成,在servlet中使用此方法已经不起作用了。filter的例子如下:[java]view plaincopyimportjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;publicclassCharacterEncodingFilterimplementsFilter{privateStringencoding;publicCharacterEncodingFilter(){encoding=null;}publicvoiddestroy(){encoding=null;}publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{request.setCharacterEncoding(encoding);chain.doFilter(request,response);}publicvoidinit(FilterConfigfilterConfig)throwsServletException{encoding=filterConfig.getInitParameter("encoding");if(encoding==null||"".equals(encoding)){encoding="UTF-8";}}}我们可以在web.xml使用这个filter。web.xml的相应配置如下:[xhtml]view plaincopyCharacterEncodingFilterCharacterEncodingFilterencodingUTF-8CharacterEncodingFilter/*通过上述两种方式的预处理,在servlet中取出的数据可以不必进行ISO-8859-1解码而直接使用。字符集的选择在处理application/x-www-form-urlencoded类型的数据过程中,需要注意的另一个问题是字符集的选择问题。如上所述,不论是request-line还是request-body,其URLEncoding所使用的字符集都是当前网页在浏览器上显示时所使用的字符集。而这个信息又是HTTP服务器端生成HTML网页时,在HTTP响应中提供的。
当HTTP服务器接收到一个HTTP请求时,服务器总是需要向用户端发送一个HTTP响应。HTTP响应数据与HTTP请求数据格式相同,同样由以下几个部分组成:


[]下面描述的是请求一个HTML网页数据时服务器的响应信息:HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 265
Date: Thu, 17 Dec 2009 05:20:36 GMT



test


Hello World




[End]其中headers的Content-Type指定了数据流的数据格式以及显示用的字符集。这一指标可以通过以下几种方式指定:
1. HTML网页
在HTML网页的中存在多个标签,其中可以设置Content-Type。例如:2. JSP网页
JSP网页中,除了标签之外,还需要在JSP网页头部设置如下代码:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>3. Servlet类
如果要在Servlet类中通过response向用户端传送HTML数据,需要在传送前指定Content-Type。代码如下:response.setContentType("text/html;charset=UTF-8");通过上述三种方式,可以确保响应数据传送到用户端浏览器时,浏览器使用正确解码方式和字符集显示其内容。结束语总之,Content-Type是联系用户端与服务器端的纽带,通过这一指标,双方得以对相关的数据进行正确的编码与解码。只要了解了Content-Type的作用以及使用方法,乱码问题就会迎刃而解。


如何解决Java WEB应用中的乱码问题
一方码里面的设置,比jsp里,
另一方面就是eclipse置,idea不熟悉,
一般就那几方,一,在eclipse里右键项目名字-resource,会有text file encoding的设置

二,菜单栏里Windows- preferences- 可以在搜索条里搜encod, 会出来两个,content type 和workspace 这两个地方也是设置字符集的
或者直接找General -- workspace同上设置 ,General- Content Type这里面是各种文件的编码格式,看下乱码的文件格式,如是注释文件,xml,或者java,dtd等保证编码格式的完全统一这个太笼统了


上一篇: 下一篇: