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

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

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

    yanmin

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      16 隨筆 :: 1 文章 :: 9 評(píng)論 :: 0 Trackbacks
    最近做一個(gè)項(xiàng)目,里面很多特殊字符,引發(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點(diǎn)非常重要,之前忽略了,發(fā)現(xiàn)插入導(dǎo)入數(shù)據(jù)庫后,數(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'Ivoire


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

    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 類型的文件里,通過batch job 導(dǎo)入數(shù)據(jù)庫。 
    檢查導(dǎo)入的數(shù)據(jù)的文件格式,格式采用: UTF8 without BOM, 
    可以用NOTEPAD++, CONVER TO UTF8 without BOM

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

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

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

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


    JAVA 代碼中直接賦值的或是頁面錄入的。
    1: 頁面的就很簡(jiǎn)單了,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 閱讀(1991) 評(píng)論(1)  編輯  收藏

    評(píng)論

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 色噜噜的亚洲男人的天堂| 亚洲男女性高爱潮网站| 污污的视频在线免费观看| 久久精品国产亚洲AV忘忧草18| 国产成人免费a在线资源| 亚洲中文字幕AV在天堂| 久久久久国产精品免费免费搜索| 全亚洲最新黄色特级网站| 全部免费毛片在线| 污网站免费在线观看| 美女内射毛片在线看免费人动物| 99在线热视频只有精品免费| 在线免费视频一区| 亚洲VA成无码人在线观看天堂 | 一级一级一片免费高清| 免费大学生国产在线观看p| 一级中文字幕免费乱码专区| 亚洲成人国产精品| 亚洲熟妇久久精品| 毛片在线播放免费观看| 精品无码一区二区三区亚洲桃色 | 一级毛片大全免费播放下载| 亚洲一区二区女搞男| 亚洲成a∧人片在线观看无码| 日韩电影免费在线观看网站| 国产精品极品美女免费观看| 欧洲精品码一区二区三区免费看| 中文字幕无码成人免费视频| 日韩免费视频一区二区| 亚洲精品一卡2卡3卡三卡四卡| 三年片在线观看免费西瓜视频| 伊人久久亚洲综合影院| 中文无码亚洲精品字幕| 182tv免费观看在线视频| 亚洲一区二区三区在线播放| 人妻丰满熟妇无码区免费| 亚洲制服丝袜中文字幕| 亚洲精品国产精品乱码不卡| 国产亚洲人成在线播放| 91免费资源网站入口| 国产特黄特色的大片观看免费视频|