paulwong

          關(guān)于特殊字符的一些總結(jié)

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

          數(shù)據(jù)庫(kù)手工導(dǎo)入數(shù)據(jù)
          1. 先檢查數(shù)據(jù)庫(kù)的字符集和客戶(hù)端字符集是否一致。 采用的是UTF8 查看語(yǔ)句:
            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點(diǎn)非常重要,之前忽略了,發(fā)現(xiàn)插入導(dǎo)入數(shù)據(jù)庫(kù)后,數(shù)據(jù)顯示不對(duì)。 驗(yàn)證你導(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'Ivoie
          數(shù)據(jù)庫(kù)腳本中遇到特殊字符:

          1. 單引號(hào)‘ , oracle 腳本需要寫(xiě)成 兩個(gè)單引號(hào)
          2. 特殊字符&, oracle 表示需要的參數(shù), 若是數(shù)據(jù)中有這個(gè)有2個(gè)方法:
            第1 種:
            set define off;
            第2種:
            set escape on;

            然后將所有的&, 替換成/&。
          3. 空行
            用<br> 代替。
          JAVA 代碼導(dǎo)入數(shù)據(jù):

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

          java 代碼:

          1: 讀文件
          InputStreamReader read = new InputStreamReader (new FileInputStream(file),"UTF-8");
          BufferedReader inBuf
          =new BufferedReader(read); 

          2: 檢查所用開(kāi)發(fā)工具的文件ENCODING 字符。

          這個(gè)就是會(huì)為什么導(dǎo)致沒(méi)發(fā)現(xiàn):
          讀文件錯(cuò)誤,在開(kāi)發(fā)工具中打出的LOG 欺騙了我們的眼睛。我的開(kāi)發(fā)工具BEA 里JAVA 文件默認(rèn)ENCODING cp1252, 改成UTF8 就好了。

          這個(gè)特別容易忽略,當(dāng)在控制臺(tái)看LOG的時(shí)候,發(fā)現(xiàn)讀過(guò)來(lái)的文件里的內(nèi)容打出來(lái)都正確,就忽略了JAVA的源文件。認(rèn)為是從unicode轉(zhuǎn)換 utf8 有問(wèn)題,特別將字符又做了處理,發(fā)現(xiàn)插入數(shù)據(jù)庫(kù)還是不正確。

          修改了ENCODING 字符字符后發(fā)現(xiàn)讀入文件就不對(duì)了。這樣輕松就解決了。

          所以只要修改了讀文件的時(shí)候采用 UTF8格式就可以啦。

          posted on 2011-05-22 11:28 paulwong 閱讀(314) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): J2EE

          主站蜘蛛池模板: 边坝县| 塔城市| 来凤县| 宁安市| 无棣县| 新竹县| 田东县| 许昌县| 博野县| 鸡西市| 唐海县| 利辛县| 宿松县| 阳春市| 祁连县| 大埔区| 白河县| 东城区| 安塞县| 萨迦县| 新丰县| 广宁县| 新沂市| 台北市| 常宁市| 承德县| 庄浪县| 海晏县| 九江市| 卓尼县| 连云港市| 玉山县| 察隅县| 福鼎市| 延庆县| 建阳市| 镇平县| 宝兴县| 萨迦县| 丹巴县| 万宁市|