C4 中文亂碼

JSP的中文字符一直" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > jsp頁(yè)面中文亂碼,怎么解決?

jsp頁(yè)面中文亂碼,怎么解決?

時(shí)間:2024-02-15 19:35:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2024-02-15 19:35:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

jsp頁(yè)面中文亂碼,怎么解決?: JSP亂碼的原因有多種,需要一一分析解決,我一直收藏著這篇文章(出處找不到了,知道的不妨告訴我一聲,謝謝),基本上可以解決大部分的JSP中文亂碼問(wèn)題了:

C4 中文亂碼

JSP的中文字符一直是各位初學(xué)者首先要解決的問(wèn)題,下面進(jìn)行了總結(jié),也給出了解決辦法。

C4.1 HTML中文編碼轉(zhuǎn)換

在JSP文件中的靜態(tài)文字顯示亂碼,則需要在<head></head>之間增加中文設(shè)置代碼,如清單附C-5所示。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

charset指定UTF-8字符集,當(dāng)然也可以指定其他支持中文的編碼,如GBK和GB2312。但是整個(gè)Web應(yīng)用中一定要統(tǒng)一一種編碼,推薦統(tǒng)一為UTF-8編碼。

C4.2 JSP中文編碼轉(zhuǎn)換

針對(duì)Tomcat下動(dòng)態(tài)內(nèi)容的中文亂碼問(wèn)題,有以下幾個(gè)解決辦法:

1. 在每個(gè)JSP文件的開(kāi)頭增加如下代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

2. 設(shè)置編碼參數(shù):

request.setCharacterEncoding("UTF-8");

3. 使用編碼過(guò)濾器。創(chuàng)建過(guò)濾器類(lèi)SetCharacterEncoding,源碼如清單附C-5所示。

清單附C-5 SetCharacterEncoding.java

package chapc;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

publicclass SetCharacterEncoding implements Filter {

@Override

publicvoid destroy() {

}

@Override

publicvoid doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//設(shè)置字符編碼

request.setCharacterEncoding("UTF-8");

//將控制傳到下一個(gè)過(guò)濾器,如果沒(méi)有過(guò)濾器則傳到被調(diào)用者

chain.doFilter(request, response);

}

@Override

publicvoid init(FilterConfig arg0) throws ServletException {

}

}

過(guò)濾器類(lèi)還需要在web.xml中進(jìn)行配置,設(shè)定要過(guò)濾哪些請(qǐng)求。過(guò)濾器在web.xml中的配置如清單附C-6所示。

清單附C-6 web.xml片段

<filter>

<filter-name>SetCharacterEncoding</filter-name>

<filter-class>chapc.SetCharacterEncoding</filter-class>

</filter>

<filter-mapping>

<filter-name>SetCharacterEncoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

方法1、方法2和方法3經(jīng)常需要使用,但它們一般不是獨(dú)立使用,而是兩兩結(jié)合:1和2結(jié)合;1和3結(jié)合。附錄A中的示例用到了1和2的結(jié)合。第四章Hibernate中的信息發(fā)布系統(tǒng)用到了1和3的結(jié)合。

4. 修改Tomcat根目錄中conf子目錄下的server.xml文件,在中加入U(xiǎn)RIEncoding="UTF-8",如清單附C-7所示。

清單附C-7 server.xml片段

<Connector connectionTimeout="20000"

port="8080"

protocol="HTTP/1.1"

redirectPort="8443"

URIEncoding="UTF-8"/>

該方法用來(lái)解決瀏覽器地址欄中的傳遞中文參數(shù)導(dǎo)致的亂碼問(wèn)題。瀏覽器地址欄傳遞參數(shù)(URL傳參)一般表現(xiàn)為三種情況:form表單的get方法提交、超鏈接傳參和response傳參。

1) form表單提交方法是get:

<form action="registerProcess.jsp" method="get">

2) 在超鏈接中傳遞中文參數(shù):

<a href="a.jsp?p=中文參數(shù)">超鏈接傳遞中文參數(shù)測(cè)試</a>

5. 如果是調(diào)用response.sendRedirect傳遞中文參數(shù)產(chǎn)生的亂碼,如:

response.sendRedirect("a.jsp?p=中文參數(shù)");

請(qǐng)修改成如:

<% //引入U(xiǎn)RLEncoder %>

<%@page import="java.net.URLEncoder"%>

<%

String p = "中文參數(shù)";

//對(duì)中文參數(shù)編碼

p = URLEncoder.encode(p, "UTF-8");

response.sendRedirect("a.jsp?p=" + p);

%>

以解決亂碼問(wèn)題。

如果方法4還不能解決某些超鏈接傳參亂碼問(wèn)題,請(qǐng)使用方法5,如下:

<%@page import="java.net.URLEncoder"%>

<%

String p = "中文參數(shù)";

//對(duì)中文參數(shù)編碼

p = URLEncoder.encode(p, "UTF-8");

%>

<a href="a.jsp?p=<%=p %>">超鏈接傳遞中文參數(shù)測(cè)試</a>

6. JavaScript中如果出現(xiàn)URL傳參亂碼問(wèn)題,如:

open("a.jsp?p=中文參數(shù)");

請(qǐng)修改成:

<script type="text/javascript">

function openWindow()

{

var url = "a.jsp?p=中文參數(shù)";

url = encodeURI(url);

open(url);

}

</script>

<input type="button" value="JavaScript中文參數(shù)"

onclick="openWindow();">

以解決亂碼問(wèn)題。

JavaScript中的open方法打開(kāi)瀏覽器窗口,傳遞參數(shù),其本質(zhì)也是URL傳參。一般方法4就可以很好的解決中文參數(shù)亂碼問(wèn)題。如果方法4不生效,才考慮方法6。

C4.3 MySQL數(shù)據(jù)庫(kù)中文編碼轉(zhuǎn)換

在設(shè)定連接數(shù)據(jù)庫(kù)URL時(shí)指定字符編碼,可以確保數(shù)據(jù)正確的現(xiàn)實(shí)在網(wǎng)頁(yè)上:

jdbc:mysql://localhost:3306/exam?useUnicode=true&characterEncoding=utf8;

C4.4 存在的問(wèn)題與題外話(huà)

1. 存在問(wèn)題

在第二節(jié)的第四部分提到了修改Tomcat根目錄中conf子目錄下的server.xml文件,以支持在URL中傳遞中文參數(shù)。

這種方法存在一個(gè)問(wèn)題,就是Tomcat服務(wù)器下可能不止一個(gè)Web應(yīng)用,而多個(gè)Web應(yīng)用的編碼又不一樣,這個(gè)時(shí)候就不能修改server.xml了??梢試L試采用:

String p = new String(p.getBytes(“源編碼”),”目標(biāo)編碼”)

源編碼可以是:ISO-8859-1、GB2312和GBK等合法編碼;

目標(biāo)編碼為:UTF-8、GBK和GB2312等合法編碼。

用戶(hù)在使用這個(gè)方法的時(shí)候需要確定源編碼和目標(biāo)編碼各是什么,才能解決中文亂碼問(wèn)題。

2. 題外話(huà)

數(shù)據(jù)庫(kù)的編碼問(wèn)題除了可以修改連接URL之外,也可以采用方法:

String p = new String(p.getBytes(“源編碼”),”目標(biāo)編碼”)

關(guān)鍵詞:解決,中文

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉