亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1345 | 回復(fù): 0
打印 上一主題 下一主題

Java開發(fā)過程中中文亂碼問題總結(jié) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-05-26 14:24 |只看該作者 |倒序瀏覽
一、文件亂碼處理

1、文件默認編碼:默認使用項目的默認編碼
右擊文件->roperties->Resource->Text file encoding

2、JSP文件編碼:由于JSP要翻譯為Servlet

   <%@ page language="java" pageEncoding="utf-8"%>



二、瀏覽器與服務(wù)器傳輸數(shù)據(jù)亂碼處理

1、瀏覽器端編碼,一般由服務(wù)器端告訴瀏覽器如何解碼數(shù)據(jù):

1.1、Servlet

    response.setContentType("text/html; charset=UTF-8"); 或者  response.setCharacterEncoding(“UTF-8”);

1.2、JSP

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

1.3、通用

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

1.4、Javascript傳參亂碼

在瀏覽器端對要傳遞的中文參數(shù)進行編碼處理.代碼如下:
       xmlhttp.open("POST",url,true); //請求參數(shù)初始化
       xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因為請求方式為POST,所以這里要設(shè)置請求頭.(如果請求方式為GET,此句代碼可以省略)
       xmlhttp.send("name="+encodeURI(encodeURI("星期日"))); //向服務(wù)器端發(fā)送參數(shù)
在服務(wù)器端代碼:

頁面jsp保證是utf-8編碼

<%@ page contentType="text/html; charset=utf-8"%>

接受中文參數(shù)
       PrintWriter out = response.getWriter(); //得到response的輸出流對象
       String name1 = request.getParameter("name"); //得到KEY為"name"的請求參數(shù)
       String name = URLDecoder.decode(name1,"utf-8"); //對得到的參數(shù)進行解碼
       out.print(name); //向瀏覽器端發(fā)送數(shù)據(jù)

1.5、熱鏈接傳參亂碼

在傳參的jsp對中文進行編碼:href="new.jsp?name=java.net.URLEncoder.encode("鏈接")";

在接受的jsp對中文進行轉(zhuǎn)碼:String str = URLDecoder.decode(request.getParameter("name "), "utf-8");

注:瀏覽器編碼可以由我們手工修改,但最后不要這樣,一般讓瀏覽器自動選擇即可。



2、服務(wù)器端編碼,將客戶端傳過來的數(shù)據(jù)進行解碼:
瀏覽器默認使用ISO-8859-1進行編碼數(shù)據(jù),然后將數(shù)據(jù)傳輸?shù)椒⻊?wù)器,因此我們默認只需要將瀏覽器發(fā)送過來的數(shù)據(jù)轉(zhuǎn)換為我們需要的編碼即可。

2.1、最簡單方式:

    String username = request.getParameter(“username”);

    username = new String(username.getBytes("ISO-8859-1“), "UTF-8");

2.2、比較好的解決方案
// 必須在獲取參數(shù)之前,調(diào)用如下方法先解碼 request.setCharacterEncoding(“UTF-8”);

String username = request.getParameter(“username”);


2.3、比較通用方案:在一個Filter中更改所有請求的編碼方式:

A、在src中添加filter來設(shè)置編碼格式是中文,filter類可以在tomcat的包里面:apache-tomcat-6.0.16.zip\apache-tomcat-6.0.16\webapps\examples\WEB-INF\classes\filters下面,SetCharacterEncodingFilter.java文件
B、在web.xml中配置
filter,具體配置如下頁:

<filter>

        <filter-name>Set Character Encoding</filter-name>

        <filter-class>filters.SetCharacterEncodingFilter</filter-class>

        <init-param><param-name>encoding</param-name>

       <param-value>utf-8</param-value></init-param>

</filter>

<filter-mapping>

        <filter-name>Set Character Encoding</filter-name>

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

</filter-mapping>


2.4、GET提交方式中文亂碼解決

通過修改request.setCharacterEncoding(“UTF-8”);只能解決POST提交方式的請求編碼,對GET無效。

A、最簡單解決方案:
該解決方案不再需要任何額外配置(如filter) TOMCAT默認ISO-8859-1 因此可以設(shè)置默認編碼為UTF-8解決,在conf\server.xml文件中設(shè)置如下 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding=”UTF-8”/>

B、在tomcat4之后,可以通過如下配置來解決中文亂碼,但必須配置filter
在conf\server.xml文件中設(shè)置如下 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI=“true”/>
然后request.setCharacterEncoding(“UTF-8”)也可解決GET亂碼


3、Java與數(shù)據(jù)庫之間的亂碼:
  大部分數(shù)據(jù)庫都支持以unicode編碼方式,所以解決Java與數(shù)據(jù)庫之間的亂碼問題比較明智的方式是直接使用unicode編碼與數(shù)據(jù)庫交互。很多數(shù)據(jù)庫驅(qū)動自動支持unicode,如Microsoft的SQLServer驅(qū)動。其他大部分數(shù)據(jù)庫驅(qū)動,可以在驅(qū)動的url參數(shù)中指定,如mysql驅(qū)動:

jdbc:mysql://localhost/MYAPPS?useUnicode=true&characterEncoding=GBK。

或者使用JAVA程序,修改編碼,程序如下:

  1. public class Convert {

  2.   public static String ISOtoGB(String iso){
  3.   String gb;
  4.   try{
  5.     if(iso.equals("") || iso == null){
  6.       return "";
  7.     }
  8.     else{
  9.       iso = iso.trim();
  10.       gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
  11.       return gb;
  12.     }
  13.   }
  14.   catch(Exception e){
  15.     System.err.print("編碼轉(zhuǎn)換錯誤:"+e.getMessage());
  16.     return "";
  17.     }
  18.   }
  19. }
復(fù)制代碼




4、Java與文件/流之間的亂碼:
  Java讀寫文件最常用的類是FileInputStream / FileOutputStream和FileReader / FileWriter。其中FileInputStream和FileOutputStream是基于字節(jié)流的,常用于讀寫二進制文件。讀寫字符文件建議使用基于字符的FileReader和FileWriter,省去了字節(jié)與字符之間的轉(zhuǎn)換。但這兩個類的構(gòu)造函數(shù)默認使用系統(tǒng)的編碼方式,如果文件內(nèi)容與系統(tǒng)編碼方式不一致,可能會出現(xiàn)亂碼。在這種情況下,建議使用FileReader和FileWriter的父類:InputStreamReader / OutputStreamWriter,它們也是基于字符的,但在構(gòu)造函數(shù)中可以指定編碼類型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP