『壹』 Ajax使用GET發送中文請求JAVA-Servlet亂碼問題
如果在JSP頁面以GET方式向Servlet發送請求時,這里在doGet()方法中用 request.getParameter()方法取得參數值是亂碼,如果你在調用 request.getParameter()方法之前使用response.setCharacterEncoding("utf-8");這種方式只是對頁面發送POST請求有效,哪么如何對發送GET請求有效果呢,這時就需要在Tomcat的server.xml中配置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"/> <!-- 指定URI編碼格式-->
所以只有指定URI編碼格式後頁面向Servlet發送GET請求時不會出現中文亂碼問題
『貳』 java訪問網站GET的數據中文亂碼
get方式提交的參數編碼,只支持iso8859-1編碼。
因此,如果裡面有中文。
在後台就需要轉換編碼,如下
String zhongwen = request.getParameter("zhongwen");
zhongwen = new String(zhongwen.getBytes("iso8859-1"),"GBK");
前提是你頁面編碼就是GBK,如果是utf-8,那上面那句代碼後面就改成utf-8
『叄』 關於java過濾器解決中文亂碼的
因為你襲遺漏了重要的一步。正確的方法如下:
if(encoding!=null){
//設置request字元編碼
request.setCharacterEncoding(encoding);
//設置response字元編碼
response.setContentType("text/html;charset="+encoding);
response.setCharacterEncoding(encoding);
}
//傳遞給下一個過濾器
chain.doFilter(request,response);
『肆』 javaweb怎麼處理中文亂碼
1.UTF-8國際編碼,GBK中文編碼。GBK包含GB2312,即如果通過GB2312編碼後可以通過GBK解碼,反之可能不成立;
2、web tomcat:默認是ISO8859-1,不支持中文的
3.java.nio.charset.Charset.defaultCharset()獲得平台默認字元編碼;
4.getBytes() 是通過平台默認字元集進行編碼;
二、引入
在學習任何一門技術時,經常會有初學者遇到中文亂碼問題,比如MySQL,是因為在安裝時沒有設置;而在Servlet中,也會遇到中文亂碼問題;
比如:
OutputStream out = response.getOutputStream();
out.write(String );
輸出中文時可能會出現亂碼;
比如:
[java]view plain
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
OutputStreamout=response.getOutputStream();
Stringdata="博客";
out.write(data.getBytes("UTF-8"));
輸出亂碼的問題是程序用UTF-8編碼,而瀏覽器默認用GBK解碼了,因此會出現亂碼;
三、Servlet相關的幾種亂碼
1、瀏覽器調用jsp,html等頁面中文顯示亂碼
此情況需滿足兩個要求:
(1)文件本身是以utf-8編輯保存的(myEclipse中在properties中滑鼠右鍵選擇utf-8)
(2)瀏覽器用utf-8解析:
(手動)==> 在瀏覽器中右鍵選擇編碼格式為utf-8
(智能)==> 在文件中寫入如:<meta name="content-type" content="text/html; charset=UTF-8"> 通過<meta>標簽模擬response頭,起到告訴瀏覽器用utf-8的編碼解析
(智能)==>response.setContentType("text/html;charset=UTF-8");起到告訴瀏覽器用utf-8的編碼解析
常用:
<meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">
<%@ pageEncoding="utf-8"%>
<?xml encoding="UTF-8"?>
2、通過瀏覽器調用servlet,頁面顯示亂碼。
Servlet亂碼分為request亂碼和response亂碼;
(1)response亂碼問題
解決方法:
在網上很有效的解決方法是添加:
response.setCharacterEncoding("UTF-8");
解決不了,後來又搜到一條解決方法是:
response.setContentType("text/html;charset=utf-8");或者response.setHeader("content-type","text/html;charset=UTF-8");告訴瀏覽器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在攔截器Filter中設置字元編碼,則無此方法,因為Filter的doFilter方法的參數類型是ServletResponse)
兩句都填上,後來終於解決了這個問題;
其實我們應該思考一下本質:
response.setContentType("text/html;charset=UTF-8");目的是為了控制瀏覽器的行為,即控制瀏覽器用UTF-8進行解碼;
response.setCharacterEncoding("UTF-8");目的是用於response.getWriter()輸出的字元流的亂碼問題。如果是response.getOutputStream()是不需要此種解決方案的,因為這句話的意思是為了將response對象中的數據以UTF-8解碼後的位元組流發向瀏覽器
『伍』 java get方式請求中文亂碼求解決
『陸』 java get方式中文亂碼
get方式提交的參數編碼,只支持iso8859-1編碼。
因此,如果裡面有中文。
在後台專就需要轉換編碼,如下
String zhongwen = request.getParameter("zhongwen");
zhongwen = new String(zhongwen.getBytes("iso8859-1"),"GBK");
前提是屬你頁面編碼就是GBK,如果是utf-8,那上面那句代碼後面就改成utf-8
『柒』 java中文亂碼
前台頁面編碼和後台都統一了沒有,實在不行,url傳中文的話,,先用js 編碼一下,在java里轉回來,js部分:function unicode(str){ return
* str.replace(/[^\u0000-\u00FF]/g,function($0){return<br> * escape($0).replace(/(%u)(\w{4})/gi,\\u$2)}); }java 部分:public static String Unicode2GBK(String inputPara) {
String inWord = "uu";
StringBuffer buffer = new StringBuffer();
if (inputPara != null) {
String result = inputPara.replaceAll(inWord, "\\\\u");
int index = 0;
while (index < result.length()) {
if ("\\".equals(result.substring(index, index + 1))) {
if ("u".equals(result.substring(index + 1, index + 2))) {
String charStr = "";
charStr = result.substring(index + 2, index + 6);
char letter = (char) Integer.parseInt(charStr, 16);
buffer.append(letter);
index += 6;
}
} else {
buffer.append(result.charAt(index));
index++;
}
}
return buffer.toString();
}
return "";
}
『捌』 java 接收get請求帶中文亂碼,已經更改字元編碼 可是不生效
給的信息太少了,,出現亂碼有好幾多原因。。主要是你請求是傳參編碼格式、容器格式以及你代碼去參是的格式。最好把這些都使用統一的格式。
『玖』 java filter 過濾器中文亂碼 怎麼解決啊
1、首先編寫一個Java類的filter代碼。操作步驟:
(1)在myeclipse中新建一個java類,
(2)單擊「Add」按鈕,在彈出來的對話框中「選擇介面」文本框中輸入Filter,
並選擇匹配好的類型javax.servlet
(3)單擊「OK」按鈕返回"New Java Class"對話,然後單擊「Finish」按鈕,就可以看到創建的過濾器框架:
過濾器類:Encoding.java,代碼如下:
package com;
import java.io.IOException;
import javax.servlet.*;
public class Encoding implements Filter {
protected String encoding=null;
protected FilterConfig config;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(request.getCharacterEncoding()==null){
//得倒指定的編碼
String encode=getEncoding();
if(encode!=null){
//設置request的編碼
request.setCharacterEncoding(encode);
response.setCharacterEncoding(encode);
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.config=filterConfig; //得到web.xml中的配置編碼
this.encoding=filterConfig.getInitParameter("Encoding");
}
protected String getEncoding(){
return encoding;
}
}
2、在web.xml文件寫入以下代碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<filter> <!-- 控制編碼 -->
<filter-name>EncodingFilter</filter-name>
<filter-class>com.Encoding</filter-class>
<init-param> <!-- 初始化參數 -->
<param-name>Encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
『拾』 java的get提交中文數據,得到亂碼,可為什麼亂碼大多是問號
舉個例子,現在我們都會漢語,有一天一個日本鬼子(客戶端請求的數據,擁有和你不同的編碼)來了和你(服務端是另一種編碼格式)對話。你會想著他會說什麼王八蛋之類,但是他卻說的八嘎呀路,這時候你就蒙了!用你的語言根本不理解也不知道他說的是什麼,所以你的腦海里出現了很多問號代表你解釋不了