yanmin

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            16 隨筆 :: 1 文章 :: 9 評論 :: 0 Trackbacks
          <2011年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          最近做一個項目,里面很多特殊字符,引發(fā)了一些問題,解決后很開心,特別來分享。
          特殊字符:
          Jörg Ranau
          Sigut? Jakštonyt?
          Côte d'Ivoire

          數(shù)據(jù)庫手工導(dǎo)入數(shù)據(jù)

          1 先檢查數(shù)據(jù)庫的字符集和客戶端字符集是否一致。 采用的是UTF8
          查看語句:
          select * from nls_database_parameters

          2 若是采用DOS 下的SQLPLUS 導(dǎo)入數(shù)據(jù),需要set NLS_LANG=AMERICAN_AMERICA.UTF8
          windows:    set NLS_LANG=AMERICAN_AMERICA.UTF8
          unix:    NLS_LANG=AMERICAN_AMERICA.UTF8

          3:   檢查導(dǎo)入的數(shù)據(jù)的文件格式,格式采用: UTF8 without BOM, 
          可以用NOTEPAD++, CONVER TO UTF8 without BOM
          也可以用txt , 轉(zhuǎn)換成UTF8.

          第3點非常重要,之前忽略了,發(fā)現(xiàn)插入導(dǎo)入數(shù)據(jù)庫后,數(shù)據(jù)顯示不對。

          驗證你導(dǎo)入的數(shù)據(jù)是否正確可以用ORACLE DUMP 命令。
          select dump(country_desc),country_desc  from tb_test  where testcode='1';
          Typ=1 Len=14: 67,195,180,116,101,32,100,39,73,118,111,105,114,101        Côte d'Ivoire


          數(shù)據(jù)庫腳本中遇到特殊字符:
          1:  單引號‘ , oracle 腳本需要寫成 兩個單引號
          UPDATE pi_portal_nday SET ND_CTY='Côte d'‘Ivoire' WHERE ND_ID IN (152,162);

          2: 特殊字符&, oracle 表示需要的參數(shù), 若是數(shù)據(jù)中有這個有2個方法:
          第1 種: set define off;

          第2種:
          set escape on;
          然后將所有的&, 替換成/&。

          3: 空行
          用<br> 代替。


          JAVA 代碼導(dǎo)入數(shù)據(jù):

          要導(dǎo)入的數(shù)據(jù)都放在TXT 類型的文件里,通過batch job 導(dǎo)入數(shù)據(jù)庫。 
          檢查導(dǎo)入的數(shù)據(jù)的文件格式,格式采用: UTF8 without BOM, 
          可以用NOTEPAD++, CONVER TO UTF8 without BOM

          java 代碼:
          1 讀文件的時候采用 UTF8格式。

          InputStreamReader read = new InputStreamReader (new FileInputStream(file),"UTF-8");
          BufferedReader inBuf=new BufferedReader(read); 

          2 檢查所用開發(fā)工具的文件ENCODING 字符。
          這個就是會為什么導(dǎo)致沒發(fā)現(xiàn) 讀文件錯誤,在開發(fā)工具中打出的LOG 欺騙了我們的眼睛。

          我的開發(fā)工具BEA JAVA 文件默認ENCODING cp1252, 改成UTF8 就好了。這個特別容易忽略,當在控制臺看LOG的時候,發(fā)現(xiàn)讀過來的文件里的內(nèi)容打出來都正確,就忽略了JAVA的源文件。認為是從unicode轉(zhuǎn)換 utf8 有問題,特別將字符又做了處理,發(fā)現(xiàn)插入數(shù)據(jù)庫還是不正確。 修改了ENCODING 字符字符后發(fā)現(xiàn)讀入文件就不對了。這樣輕松就解決了。 所以只要修改了讀文件的時候采用 UTF8格式就可以啦。


          JAVA 代碼中直接賦值的或是頁面錄入的。
          1: 頁面的就很簡單了,JSP 或是HTML ,里面加入字符是UTF8的就OK
          2: 代碼里面的,需要轉(zhuǎn)換:
          byte[] byteArr1 = columnValueBe.getBytes("UTF-8");
          columnValue = new String(byteArr1, "UTF-8");













          posted on 2011-05-20 18:29 yanmin 閱讀(1994) 評論(1)  編輯  收藏

          評論

          # re: 關(guān)于特殊字符的一些總結(jié) 2011-05-21 07:58 jacklondon
          不建議在 Java 代碼中寫
          byte[] byteArr1 = columnValueBe.getBytes("UTF-8");
          columnValue = new String(byteArr1, "UTF-8");
          其實在 JDBC 連接字符串里指明編碼就可以了。一般都會封裝成一個公共函數(shù)。
          在 Java 代碼中寫寫轉(zhuǎn)換很難看。還得每個地方寫,麻煩。  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 衡阳市| 苗栗县| 涿州市| 开平市| 林西县| 龙山县| 罗江县| 仙游县| 柘城县| 通许县| 甘孜县| 西盟| 民和| 涟水县| 永定县| 通许县| 北票市| 文化| 读书| 荔波县| 厦门市| 澳门| 阿城市| 阿拉善盟| 宣恩县| 车险| 扶绥县| 汉沽区| 太康县| 南开区| 萝北县| 琼结县| 北川| 定南县| 平果县| 贵定县| 遵义县| 平山县| 内丘县| 满城县| 巴楚县|