欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
java中文解決大全(下)
4、中文問(wèn)題的分類(lèi)及其建議最優(yōu)解決辦法

    了解以上JAVA處理文件的原理之后,我們就可以提出了一套建議最優(yōu)的解決漢字問(wèn)題的辦法。
    我們的目標是:我們在中文系統中編輯的含有中文字符串或進(jìn)行中文處理的JAVA源程序經(jīng)編譯后可以移值到任何其它的操作系統中正確運行,或拿到其它操作系統中編譯后能正確運行,能正確地傳遞中文和英文參數,能正確地和數據庫交流中英文字符串。
    我們的具體思路是:在JAVA程序轉碼的入口和出口及JAVA程序同用戶(hù)有輸入輸出轉換的地方限制編碼方法使之正確即可。

    具體解決辦法如下:

    1、 針對直接在console上運行的類(lèi)
    對于這種情況,我們建議在程序編寫(xiě)時(shí),如果需要從用戶(hù)端接收用戶(hù)的可能含有中文的輸入或含有中文的輸出,程序中應該采用字符流來(lái)處理輸入和輸出,具體來(lái)說(shuō),應用以下面向字符型節點(diǎn)流類(lèi)型:
    對文件:FileReader,FileWrieter
        其字節型節點(diǎn)流類(lèi)型為:FileInputStream,FileOutputStream
    對內存(數組):CharArrayReader,CharArrayWriter
        其字節型節點(diǎn)流類(lèi)型為:ByteArrayInputStream,ByteArrayOutputStream
    對內存(字符串):StringReader,StringWriter
    對管道:PipedReader,PipedWriter
        其字節型節點(diǎn)流類(lèi)型為:PipedInputStream,PipedOutputStream
    同時(shí),應該用以下面向字符型處理流來(lái)處理輸入和輸出:
    BufferedWriter,BufferedReader
        其字節型的處理流為:BufferedInputeStream,BufferedOutputStream
    InputStreamReader,OutputStreamWriter
    其字節型的處理流為:DataInputStream,DataOutputStream
    其中InputStreamReader和InputStreamWriter用于將字節流按照指定的字符編碼集轉換到字符流,如:
    InputStreamReader in = new InputStreamReader(System.in,"GB2312");
    OutputStreamWriter out = new OutputStreamWriter (System.out,"GB2312");
    例如:采用如下的示例JAVA編碼就達到了要求:

    //Read.java
    import java.io.*;
    public class Read {
    public static void main(String[] args) throws IOException {
    String str = "\n中文測試,這是內部硬編碼的串"+"\ntest english character";
    String strin= "";
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in,"gb2312")); //設置輸入接口按中文編碼
    BufferedWriter stdout = new BufferedWriter(new OutputStreamWriter(System.out,"gb2312")); //設置輸出接口按中文編碼
    stdout.write("請輸入:");
    stdout.flush();
    strin = stdin.readLine();
    stdout.write("這是從用戶(hù)輸入的串:"+strin);
    stdout.write(str);
    stdout.flush();
    }}
    同時(shí),在編譯程序時(shí),我們用以下方式來(lái)進(jìn)行:
    javac -encoding gb2312 Read.java
    其運行結果如圖5所示:

    圖5
2、 針對EJB類(lèi)和不可以直接運行的支持類(lèi)(如JavaBean類(lèi))

    由于這種類(lèi)它們本身被其它的類(lèi)調用,不直接與用戶(hù)交互,故對這種類(lèi)來(lái)說(shuō),我們的建議的處理方式是內部程序中應該采用字符流來(lái)處理程序內部的中文字符串(具體如上面一節中一樣),同時(shí),在編譯類(lèi)時(shí)用-encoding gb2312參數指示源文件是中文格式編碼的即可。


    3、 針對Servlet類(lèi)

    針對Servlet,我們建議用以下方法:

    在編譯Servlet類(lèi)的源程序時(shí),用-encoding指定編碼為GBK或GB2312,且在向用戶(hù)輸出時(shí)的編碼部分用response對象的setContentType("text/html;charset=GBK");或gb2312來(lái)設置輸出編碼格式,同樣在接收用戶(hù)輸入時(shí),我們用request.setCharacterEncoding("GB2312");這樣無(wú)論我們的servlet類(lèi)移植到什么操作系統中,只有客戶(hù)端的瀏覽器支持中文顯示,就可以正確顯示。如下是一個(gè)正確的示例:

    //HelloWorld.java
    package hello;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class HelloWorld extends HttpServlet
    {
    public void init() throws ServletException { }
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
    request.setCharacterEncoding("GB2312"); //設置輸入編碼格式
    response.setContentType("text/html;charset=GB2312"); //設置輸出編碼格式
    PrintWriter out = response.getWriter(); //建議使用PrintWriter輸出
    out.println("<hr>");
    out.println("Hello World! This is created by Servlet!測試中文!");
    out.println("<hr>");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
    request.setCharacterEncoding("GB2312"); //設置輸入編碼格式
    response.setContentType("text/html;charset=GB2312"); //設置輸出編碼格式
    String name = request.getParameter("name");
    String id = request.getParameter("id");
    if(name==null) name="";
    if(id==null) id="";
    PrintWriter out = response.getWriter(); //建議使用PrintWriter輸出
    out.println("<hr>");
    out.println("你傳入的中文字串是:" + name);
    out.println("<hr>你輸入的id是:" + id);
    out.println("<hr>");
    }
    public void destroy() { }
    }
        請用javac -encoding gb2312 HelloWorld.java來(lái)編譯此程序。
        測試此Servlet的程序如下所示:
    <%@page contentType="text/html; charset=gb2312"%>
    <%request.setCharacterEncoding("GB2312");%>
    <html><head><title></title>
    <Script language="JavaScript">
    function Submit() {
    //通過(guò)URL傳遞中文字符串值給Servlet
    document.base.action = "./HelloWorld?name=中文";
    document.base.method = "POST";
    document.base.submit();
    }
    </Script>
    </head>

<body bgcolor="#FFFFFF" text="#000000" topmargin="5">
    <form name="base" method = "POST" target="_self">
    <input name="id" type="text" value="" size="30">
    <a href = "JavaScript:Submit()">傳給Servlet</a>
    </form></body></html>
    其運行結果如圖6所示:

 

    圖6
    4、 JAVA程序和數據庫之間

    為避免JAVA程序和數據庫之間數據傳遞出現亂碼現象,我們建議采用以下最優(yōu)方法來(lái)處理:
    1、 對于JAVA程序的處理方法按我們指定的方法處理。
    2、 把數據庫默認支持的編碼格式改為GBK或GB2312的。

    如:在mysql中,我們可以在配置文件my.ini中加入以下語(yǔ)句實(shí)現:
    在[mysqld]區增加:
    default-character-set=gbk
    并增加:
    [client]
    default-character-set=gbk
    在SQL Server2K中,我們可以將數據庫默認的語(yǔ)言設置為Simplified Chinese來(lái)達到目的。

    5、 針對JSP代碼

    由于JSP是在運行時(shí),由WEB容器進(jìn)行動(dòng)態(tài)編譯的,如果我們沒(méi)有指定JSP源文件的編碼格式,則JSP編譯器會(huì )獲得服務(wù)器操作系統的file.encoding值來(lái)對JSP文件編譯的,它在移植時(shí)最容易出問(wèn)題,如在中文win2k中可以很好運行的jsp文件拿到英文linux中就不行,盡管客戶(hù)端都是一樣的,那是因為容器在編譯JSP文件時(shí)獲取的操作系統的編碼不同造成的(在中文wink中的file.encoding和在英文Linux中file.encoding是不同的,且英文Linux的file.encoding對中文不支持,所以編譯出來(lái)的JSP類(lèi)就會(huì )有問(wèn)題)。網(wǎng)絡(luò )上討論的大多數是此類(lèi)問(wèn)題,多是因為JSP文件移植平臺時(shí)不能正確顯示的問(wèn)題,對于這類(lèi)問(wèn)題,我們了解了JAVA中程序編碼轉換的原理,解決起來(lái)就容易多了。我們建議的解決辦法如下:

    1、我們要保證JSP向客戶(hù)端輸出時(shí)是采用中文編碼方式輸出的,即無(wú)論如何我們首先在我們的JSP源代編中加入以下一行:

    <%@page contentType="text/html; charset=gb2312"%>
    2、為了讓JSP能正確獲得傳入的參數,我們在JSP源文件頭加入下面一句:
    <%request.setCharacterEncoding("GB2312");%>
    3、為了讓JSP編譯器能正確地解碼我們的含有中文字符的JSP文件,我們需要在JSP源文件中指定我們的JSP源文件的編碼格式,具體來(lái)說(shuō),我們在JSP源文件頭上加入下面的一句即可:
    <%@page pageEncoding="GB2312"%>或<%@page pageEncoding="GBK"%>
    這是JSP規范2.0新增加的指令。
    我們建議使用此方法來(lái)解JSP文件中的中文問(wèn)題,下面的代碼是一個(gè)正確做法的JSP文件的測試程序:

//testchinese.jsp
    <%@page pageEncoding="GB2312"%>
    <%@page contentType="text/html; charset=gb2312"%>
    <%request.setCharacterEncoding("GB2312");%>
    <%
    String action = request.getParameter("ACTION");
    String name = "";
    String str = "";
    if(action!=null && action.equals("SENT"))
    {
    name = request.getParameter("name");
    str = request.getParameter("str");
    }
    %>
    <html>
    <head>
    <title></title>
    <Script language="JavaScript">
    function Submit()
    {
    document.base.action = "?ACTION=SENT&str=傳入的中文";
    document.base.method = "POST";
    document.base.submit();
    }
    </Script>
    </head>
    <body bgcolor="#FFFFFF" text="#000000" topmargin="5">
    <form name="base" method = "POST" target="_self">
    <input type="text" name="name" value="" size="30">
    <a href = "JavaScript:Submit()">提交</a>
    </form>
    <%
    if(action!=null && action.equals("SENT"))
    {
    out.println("<br>你輸入的字符為:"+name);
    out.println("<br>你通過(guò)URL傳入的字符為:"+str);
    }
    %>
    </body>
    </html>
    如圖7是此程序運行的結果示意圖:

 

    圖7

    5、總結

    在上面的詳細分析中,我們清晰地給出了JAVA在處理源程序過(guò)程中的詳細轉換過(guò)程,為我們正確解決JAVA編程中的中文問(wèn)題提供了基礎。同時(shí),我們給出了認為是最優(yōu)的解決JAVA中文問(wèn)題的辦法。

    6、參考資料
     1、段明輝.Java 編程技術(shù)中漢字問(wèn)題的分析及解決.
        http://www-900.ibm.com/developerWorks/cn/java/java_chinese/index.shtml
     2、 周競濤.關(guān)于Java中文問(wèn)題的幾條分析原則
        http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JSP+ MySQL中文亂碼問(wèn)題post提交亂碼解決方案
JSP\HTML\JAVA\SERVLET中編碼統一為UTF-8解決中文亂碼問(wèn)題
Tomcat關(guān)于encoding編碼的默認設置以及亂碼產(chǎn)生的原因
Servlet中直接response.getWriter().write() 輸出亂碼解決!
Servlet方法
寶寶 javaweb 學(xué)習總結
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久