<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 23,comments - 66,trackbacks - 0
    項目為了解決GBK字符不夠用的問題,主要是特殊字符的問題,決定趕追國際潮流采用UTF-8作為我們統一的編碼方式。于是這里邊雖然支持的編碼增加了,但是也出現了一系列的問題。
    1,模板的搭配。
    由于使用了Struts的tiles標簽來進行網頁布局,所以外層一定要用utf-8,原來實驗室的經驗是在內層采用gbk,并且別證明是夠用的,但是我們決定在這個項目里統一使用utf-8,當初也沒想到后來會出現問題。
    這樣首先出現的問題是jsp文件的編碼問題,原來使用GBK編碼的一些文件,在編碼突然變化到utf-8的時候顯得很不適應,后來終于在Eclipse,EditPlus的幫助下完成了編碼的轉換,在頁面里邊能夠很好的顯示出中文了。
    2,js文件問題。
    由于系統使用了很多編碼轉換的js,所以使用了簡單的jsp來根據數據庫中的編碼來生成js。比如報名過程中要求學員選擇項目和班次,采用下拉菜單的形式就比較簡單。但是這樣就出現了問題,按照不設定編碼的方式來生成js文件:
    1?//寫文件
    2?StringBuffer?buf1?=?new?StringBuffer();
    3?FileWriter?filew1?=?new?FileWriter("F:\\eclipse\\workplace\\jxjy\\WebRoot\\js\\"+"xm.js");
    4?//System.out.println(filew1.getEncoding());
    5?BufferedWriter?fw1=new?BufferedWriter(filew1);


    然后構造buf1也就是js文件的內容,并使用下列代碼完成寫的過程:
    1?fw1.write(new?String(buf1.toString());
    2?fw1.flush();
    3?fw1.close();
    4?fw1=null;
    5?buf1.delete(0,buf1.length()-1);

    這樣生成的文件,在utf-8的jsp頁面中被
    <script language="javascript" src="<%=cxp%>/js/xm.js"></script>
    試圖引入的時候發現引入不進來。

    剛開始根本想不到是utf-8編碼的問題,反反復復找函數的問題,后來確信絕對沒有問題才開始想別的地方,終于想到字符編碼問題。
    先是用EditPlus來把xm.js文件轉換成utf-8格式,然后奇跡般的發現居然work了。
    后來數據庫不斷的更換,每次都要求重新生成js文件,這樣就搞得我們每次都要用EditPlus轉換一遍,這樣很不爽。沒有辦法了必須要通過程序的途徑來形成能夠直接使用的js文件。
    那么首先就看代碼各個環節中涉及到編碼的地方有哪里,結果發現在StringBuffer里邊可以由String進行編碼設定,先試驗這個。我分別在
    fw1.write(new?String(buf1.toString().getBytes("UTF-8"),"UTF-8"));
    這句話里邊試過各種編碼,從
    ISO-8859-1到UTF-8,甚至UTF-16,前后怎么換都出不來。
    后來我只好去查UTF-8的編碼。發現了一個講的特別仔細的文章。后來,我記得原來在轉換編碼的時候也用過UltreaEdit,而且比EditPlus編碼好像要復雜,于是用UltreaEdit打開文件,另存,果然發現有多種編碼形式。經過試驗采用utf-8 no bom的形式就可以被網頁正確引入。于是又去查這個bom,最后也沒有找到在java里邊的名稱。搞得我心灰意冷。
    這時,我又查了一下FileWriter發現提供一個getEncoding()的方法,于是把第一段代碼中注釋的一段去掉打印出來發現是GBK。返回頭去看jsp的編碼,這個居然沒有改成utf-8,原來是這個問題,馬上改過來。可是改過來再去試還是不對。打印出來仍然是GBK,看來不是JSp文件的問題。這個問題還真麻煩。
    查了一下文件輸出流的幾個類之間的繼承關系,發現在指定輸出文件的時候也可以用OutputStreamWriter這個基類來代替FileWriter,可以在OutputStreamWriter里邊設定編碼。
    修改過之后變成下邊這個樣子:
    ?1?StringBuffer?buf1?=?new?StringBuffer();
    ?2?OutputStream?os1=?new?FileOutputStream("F:\\eclipse\\workplace\\jxjy\\WebRoot\\js\\"+"xm.js");
    ?3?OutputStreamWriter?osw1?=?new?OutputStreamWriter(os1,"UTF-8");
    ?4?//System.out.println(osw1.getEncoding());????
    ?5?BufferedWriter?fw1=new?BufferedWriter(osw1);
    ?6?//.中間構造buf1.
    ?7?fw1.write(new?String(buf1.toString().getBytes("UTF-8"),"UTF-8"));
    ?8?fw1.flush();
    ?9?fw1.close();
    10?fw1=null;
    11?buf1.delete(0,buf1.length()-1);
    這個時候我們終于看到了用程序寫出來的不用在EditPlus中修改的js文件了。謝天謝地。
    3,URIEncoding問題
    我發現在我的tomcat上可以跑,但是通過svn下載到我們組另外一個人那里就又出現了亂碼。對照一下發現跟程序沒有問題,這次還好有些經驗,想到了是URIEncoding編碼的問題。

    終于全部問題解決了。
    posted on 2006-04-08 22:33 rd2pm 閱讀(1753) 評論(0)  編輯  收藏 所屬分類: java languageweb develop

    主站蜘蛛池模板: 亚洲精品国产品国语在线| 边摸边吃奶边做爽免费视频网站| 亚洲一区二区视频在线观看| 91免费精品国自产拍在线不卡| 中文字幕免费在线看电影大全 | 美女被免费网站91色| 亚洲愉拍一区二区三区| 亚洲性天天干天天摸| 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲国产精品美女久久久久| 亚洲精品福利在线观看| 国产V亚洲V天堂无码久久久| 亚洲精品无码你懂的网站| 日本不卡高清中文字幕免费| 美女裸身网站免费看免费网站| 国产99视频精品免费专区| A级毛片成人网站免费看| 免费无码AV一区二区| 国产精品亚洲专区无码不卡| 亚洲欧美日韩综合久久久| 亚洲一区二区三区在线网站| 亚洲精品亚洲人成在线麻豆| 精品日韩亚洲AV无码| 亚洲av不卡一区二区三区| 亚洲Av无码专区国产乱码DVD| 国产日韩成人亚洲丁香婷婷| 亚洲乱码中文字幕综合234| 免费国产不卡午夜福在线| 免费人妻无码不卡中文字幕18禁| 俄罗斯极品美女毛片免费播放| 女人张腿给男人桶视频免费版 | 亚洲精品无码专区在线播放| 亚洲综合色丁香婷婷六月图片| 亚洲人成77777在线观看网| 亚洲三级在线播放| 久久狠狠爱亚洲综合影院| 亚洲黄色激情视频| 77777亚洲午夜久久多喷| 亚洲一久久久久久久久| 亚洲av无码成人影院一区| 国产精品亚洲小说专区|