`
sjk2013
  • 浏览: 2191412 次
文章分类
社区版块
存档分类
最新评论

java与jsp传递值的乱码解决方案

 
阅读更多

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

Java代码
1.String s2 = new String(s1.getBytes("ISO-8859-1"),"UTF-8");
String s2 = new String(s1.getBytes("ISO-8859-1"),"UTF-8"); 1、utf8解决JSP中文乱码问题:
一般说来在每个页面的开始处,加入:

Jsp代码
1.<%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<% request.setCharacterEncoding("UTF-8"); %>
<%@ 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"); 是对请求进行了中文编码.

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

Java代码
1.String msg = request.getParameter("message");
2.String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");
3.out.println(str);
String msg = request.getParameter("message");
String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");
out.println(str);

2、Tomcat 5.5 中文乱码:

(1).只要把%TOMCAT安装目录%/webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class文件

拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。
(2).在你的web.xml里加入如下几行:

Xml代码
1.<filter>
2. <filter-name>Set Character Encoding</filter-name>
3. <filter-class>filters.SetCharacterEncodingFilter</filter-class>
4. <init-param>
5. <param-name>encoding</param-name>
6. <param-value>GBK</param-value>
7. </init-param>
8.</filter>
9.<filter-mapping>
10. <filter-name>Set Character Encoding</filter-name>
11. <url-pattern>/*</url-pattern>
12.</filter-mapping>
<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).完成。
get方式的解决办法:
(1).打开tomcat的server.xml文件,找到区块,加入如下一行:URIEncoding="UTF-8"
完整的应如下:

Java代码
1.<Connector
2. port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
3. enableLookups="false" redirectPort="8443" acceptCount="100"
4. debug="0" connectionTimeout="20000"
5. disableUploadTimeout="true"
6. URIEncoding="UTF-8" />
<Connector
port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8" />

(2).重启tomcat,一切OK。

3、XMLHttpRequest中文问题

页面jsp用的UTF-8编码:
代码

Jsp代码
1.<%@ page contentType="text/html; charset=GBK"%>
<%@ page contentType="text/html; charset=GBK"%>

javascript部分:

Js代码
1.function addFracasReport() {
2. var url="servlet/encodingServlet";
3. //var urlmsg="&reportId="+fracasReport1.textReportId.value; //故障报告表编号
4. var xmlHttp=createXmlHttpRequest() ;
5. xmlHttp.onreadystatechange = function(){
6. //对象的状态为4表示已完成
7. if(xmlHttp.readyState==4){
8. //成功返回200,没有修改返回304
9. if(xmlHttp.status==200||xmlHttp.status==304){
10. //开始处理信息
11. //alert(xhr.responseText) ;
12. alert("请求发送成功") ;
13. }
14. }
15. }
16. xmlHttp.open("POST",url,true);
17. xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
18. var urlmsg = "hello=你好&world=世界"
19. xmlHttp.send(urlmsg);
20.}
function addFracasReport() {
var url="servlet/encodingServlet";
//var urlmsg="&reportId="+fracasReport1.textReportId.value; //故障报告表编号
var xmlHttp=createXmlHttpRequest() ;
xmlHttp.onreadystatechange = function(){
//对象的状态为4表示已完成
if(xmlHttp.readyState==4){
//成功返回200,没有修改返回304
if(xmlHttp.status==200||xmlHttp.status==304){
//开始处理信息
//alert(xhr.responseText) ;
alert("请求发送成功") ;
}
}
}
xmlHttp.open("POST",url,true);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var urlmsg = "hello=你好&world=世界"
xmlHttp.send(urlmsg);
} 此时,如果前台引用JS代码的JSP页面用的全部是UTF-8编码,那么在后获取时,不会出现乱码问题,例如在Servlet中用String

hello = request.getParameter("hello") ;获取并用System.out.println(hello) ;输出到控制台上.但是如果用

response.getWriter().print(hello);输出到页面上的话,会出现乱码问题,此时可以在Servlet中用

response.setCharacterEncoding("UTF-8") ;进行转码.

4、toad的字符集的设置与oracle的安装
oracle数据库服务器的安装一般是中文字符集,有时安装在不同的平台下,设置为ISO编码,toad是oracle开发的最好工具,不是

我说的,可是中文环境下安装的toad,打开英文字符的oracle时,中文全是乱码。必须进行设置.

环境变量->系统变量
加NLS_lANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

NLS_lANG=AMERICAN_AMERICA.WE8ISO8859P1 AMERICAN_AMERICA.WE8MSWIN1252

或者

打开注册表,点击HKEY_LOCAL_MATHINE再点击Software,再点击ORACLE在点击HOME(ORACLE所在目录)在注册表的右半面有

NLS_LANG,双击它,将你想要的覆盖掉原来的就可以了最好记下旧的,以便可以改回来。

Sql代码
1.connect sys/change_on_install
2.update props$
3.set value$='ZHS16CGB231280'
4.where name='NLS_CHARACTERSET';
5.commit;
connect sys/change_on_install
update props$
set value$='ZHS16CGB231280'
where name='NLS_CHARACTERSET';
commit;这样就OK了

5.如何解決GWT(google web toolkit)中文的问题
GWT 中文乱码解决方法

(1).把你要显示的中文“测试字符串”输入到一个文件,如:1.txt
(2).进入命令行,进入1.txt所在的目录,敲入以下命令:native2ascii.exe 1.txt 2.txt 回车。这样就生成了另外一个文件2.txt


(3).2.txt的内容如下:\u6d4b\u8bd5\u5b57\u7b26\u4e32
(4).然后用上面的编码,在gwt中使用,就可以了.

6.xmlHttp得到的网页怎么是乱码?
(1).在服务器端使用WebRequest而不是xmlHttp.
(2).将StreamReader sr = new StreamReader(stream);
对于简体中文改成:
StreamReader sr = new StreamReader(stream , Encoding.Default );
对于utf-8改成:
StreamReader sr = new StreamReader(stream , Encoding.UTF8 );
当然,Encoding枚举还有很多其他的成员,对于不同的编码content-type可以有选择的应用
(3).后来我发现无论是content-type是gb2312还是utf-8,用
StreamReader sr = new StreamReader(stream , Encoding.Default );
都可以返回正常的汉字,所以统一的改成Encoding.Default
最后,在服务器端从一个url获得网页的源代码的代码如下:

Java代码
1./// <summary>
2./// post一个指定的url,获得网页的源代码(用WebRequest实现)
3./// </summary>
4./// <param name="url"></param>
5./// <returns>
6./// 如果请求失败,返回null
7./// 如果请求成功,返回网页的源代码
8./// </returns>
9.public static string GetContentFromUrl2( string url )
10.{
11. //变量定义
12. string respstr;
13.
14. WebRequest myWebRequest=WebRequest.Create(url);
15. // myWebRequest.PreAuthenticate=true;
16. // NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
17. // myWebRequest.Credentials=networkCredential;
18.
19. // Assign the response object of 'WebRequest' to a 'WebResponse' variable.
20. WebResponse myWebResponse=myWebRequest.GetResponse();
21. System.IO.Stream stream = myWebResponse.GetResponseStream();
22. StreamReader sr = new StreamReader(stream , Encoding.Default );
23. //以字符串形式读取数据流
24. respstr = sr.ReadToEnd();
25. sr.Close();
26.
27. return respstr;
28.
29.}
/// <summary>
/// post一个指定的url,获得网页的源代码(用WebRequest实现)
/// </summary>
/// <param name="url"></param>
/// <returns>
/// 如果请求失败,返回null
/// 如果请求成功,返回网页的源代码
/// </returns>
public static string GetContentFromUrl2( string url )
{
//变量定义
string respstr;

WebRequest myWebRequest=WebRequest.Create(url);
// myWebRequest.PreAuthenticate=true;
// NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
// myWebRequest.Credentials=networkCredential;

// Assign the response object of 'WebRequest' to a 'WebResponse' variable.
WebResponse myWebResponse=myWebRequest.GetResponse();
System.IO.Stream stream = myWebResponse.GetResponseStream();
StreamReader sr = new StreamReader(stream , Encoding.Default );
//以字符串形式读取数据流
respstr = sr.ReadToEnd();
sr.Close();

return respstr;

}


7.解决weblogic/webshpere中文问题:
在web.xml文件中需要配置中文环境。如下:

Xml代码
1.<context-param>
2. <param-name>weblogic.httpd.inputCharset./*</param-name>
3. <param-value>GB2312</param-value>
4.</context-param>
<context-param>
<param-name>weblogic.httpd.inputCharset./*</param-name>
<param-value>GB2312</param-value>
</context-param>


8.利用JS过渡,在Java类中转码接收(适用WebSphere).

Js代码
1.// 前台JS代码如下
2.var url = strAction+"?method=startProc&proName="+encodeURI(encodeURI('要传的汉字'));
// 前台JS代码如下
var url = strAction+"?method=startProc&proName="+encodeURI(encodeURI('要传的汉字'));

Java代码
1.// 后台Action中解码如下
2.zjmc = java.net.URLDecoder.decode('要传的汉字',"UTF-8");
3.System.out.println(zjmc) ;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics