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

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

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

    posts - 56, comments - 54, trackbacks - 0, articles - 4
       ::  ::  :: 聯(lián)系 :: 聚合  :: 管理

    在一般的日文字符表示正常的情況下正波浪線“~”任然經(jīng)常會(huì)出現(xiàn)亂碼的情況。

    數(shù)據(jù)庫(kù)參數(shù)NLS Database Parameters
    NLS_CHARACTERSET?????????????????? JA16SJIS
    NLS_NCHAR_CHARACTERSET?? AL16UTF16

    一:對(duì)于VARCHAR2字段
    現(xiàn)象:在頁(yè)面上輸入“~”存入DB后再取出到頁(yè)面時(shí)變成“?”(頁(yè)面的字符設(shè)置為charset=shift-jis)
    調(diào)查:
    1 頁(yè)面提交后在java中觀察編碼為\uff5e
    2 java中定義一個(gè)字符變量“~”觀察編碼為\uff5e
    3 編碼為\uff5e的字符存入數(shù)據(jù)庫(kù)再取出的編碼為\u301c
    4?用Object Browser觀察數(shù)據(jù)庫(kù)中字符都正常
    結(jié)論:存入數(shù)據(jù)庫(kù)時(shí)編碼發(fā)生了變化\uff5e ---> \u301c
    解決:取出數(shù)據(jù)時(shí)遍歷發(fā)現(xiàn)\u301c就轉(zhuǎn)換為\uff5e
    ????? public String getString(int columnIndex) throws SQLException {
    ???????? // TODO: ~を変更
    ???????? String value = rs.getString(columnIndex);
    ???????? if (value != null){
    ????????????? StringBuffer sbDest = new StringBuffer();
    ????????????? char ch;
    ????????????? for(int j= 0;j< value.length();j++){
    ????????????????? ch = value.charAt(j);
    ????????????????? if(ch == 0x301c){
    ????????????????????? sbDest.append("\uff5e"); // ~
    ????????????????? }else{
    ????????????????????? sbDest.append(ch);
    ????????????????? }
    ????????????? }
    ????????????? value = sbDest.toString();
    ???????? }

    ???????? return value;
    ???? }

    二:對(duì)于NVARCHAR2字段
    現(xiàn)象:在頁(yè)面上輸入正波浪線“~”存入DB后再取出到頁(yè)面時(shí)變成反波浪線“?”(頁(yè)面的字符設(shè)置為charset=UTF-8)
    用Object Browser工具察看表中的數(shù)據(jù) 發(fā)現(xiàn)是正波浪線“~” 編碼為\u301c。(實(shí)際上用Object Browser看\u301c? \uff5e都是正波浪線)
    如果用NVARCHAR2字段,那么正確的操作后可以存入\uff5e

    試驗(yàn)用表?Products ,表中的列定義如下所示
    id - VARCHAR2(10) — 產(chǎn)品 id
    lang_id — VARCHAR2(10) — 語(yǔ)言 id
    description — NVARCHAR2(2000) — Unicode 編碼的產(chǎn)品描述

    JDBC 允許 Java 程序訪問 Oracle9i 數(shù)據(jù)庫(kù)中的 NVARCHAR2 數(shù)據(jù)類型的列。Oracle JDBC 驅(qū)動(dòng)程序把 SQL NCHAR/NVARCHAR2 列中的數(shù)據(jù)從本地字符集編碼(UTF8 或 AL16UTF16)直接轉(zhuǎn)化為 UTF-16 編碼的 Java 字符串。
    為此,我們需要把 Java 字符串綁定到一個(gè) NVARCHAR2 列。下面的代碼段顯示了完成這項(xiàng)任務(wù)的代碼。

    // Get an Oracle preparedstatement
    OraclePreparedStatement orastmt =(OraclePreparedStatement)connection.prepareStatement(
    "INSERT INTO PRODUCTS VALUES(?,?,?)");
    // Bind the 3rd parameter to NVARCHAR2 form so that the data is stored as unicode
    orastmt.setFormOfUse(3,OraclePreparedStatement.FORM_NCHAR);
    orastmt.setString(1,product.getId());
    orastmt.setString(2,product.getLangId());
    orastmt.setString(3,product.getDescription());
    orastmt.executeUpdate();
    orastmt.close();

    使用 orastmt.setFormOfUse() 方法來(lái)指定列的類型是 NVARCHAR2。確保數(shù)據(jù)以Unicode 編碼存儲(chǔ)。

    關(guān)于NVARCHAR2字段的操作參考:
    http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/9i_jdbc/NCHARsupport4UnicodeSample/Readme.html

    注意這段話:
    The only difference in usage between the SQL CHAR and SQL NCHAR datatypes occur in a data bind situation.
    The JDBC program must call the setFormOfUse() method to specify if the data is bound for a SQL NCHAR
    datatype and it must be called before binding Java variables to SQL NCHAR datatypes.
    必須先setFormOfUse再綁定變量。否則存入數(shù)據(jù)庫(kù)中的仍是\u301c

    主站蜘蛛池模板: 色噜噜AV亚洲色一区二区| 亚洲AV一宅男色影视| 国产免费内射又粗又爽密桃视频 | 91精品免费不卡在线观看| 亚洲videosbestsex日本| 国产精品黄页在线播放免费| 亚洲免费无码在线| 亚洲国产美女精品久久| 高清在线亚洲精品国产二区| 日韩成人免费视频| 亚洲aⅴ无码专区在线观看春色| 亚洲色偷拍另类无码专区| 美女视频黄免费亚洲| 一个人看的www免费在线视频| 亚洲美女一区二区三区| 亚洲女同成人AⅤ人片在线观看| 一级特黄aa毛片免费观看| 亚洲成aⅴ人片久青草影院按摩| 亚洲综合熟女久久久30p| 国产免费毛不卡片| 毛片基地看看成人免费| 久久综合久久综合亚洲| 亚洲va国产va天堂va久久| 午夜毛片不卡免费观看视频| 久久国产精品免费观看| 日本特黄特色AAA大片免费| 亚洲婷婷综合色高清在线| 亚洲真人日本在线| 成年18网站免费视频网站 | 国产精品视_精品国产免费| 女人体1963午夜免费视频| 国产成人亚洲毛片| 亚洲乱人伦精品图片| 亚洲阿v天堂在线| 女性无套免费网站在线看| 99精品视频在线观看免费播放| 九九综合VA免费看| 亚洲国产午夜精品理论片在线播放 | 国产成人无码区免费内射一片色欲| 亚洲欧美aⅴ在线资源| 久久亚洲AV无码精品色午夜|