2021年9月30日 星期四

COBOL & DB2 中文字的處理

 古時候的DB2儲存中文字會在前後用0E跟0F框起來,但後人在改寫存取時沒處理好COBOL讀取時就會變成亂碼0E0F湊起來就佔了2 BYTES,也會讓欄位要塞好塞滿時得先扣掉2bytes才行,這部分要記好別踩坑。


直接更新下指令如果兩個TABLE長度不一樣,如TABLEA.CNNAME(14)而TABLEB.CNNAME2(20),就可以透過下列語法來塞值。

UPDATE TABLEA SET CNNAME=(SELECT CONCAT(LEFT(CNNAME2,13), X'''0F''') FROM TABLEB WHERE KEY=?) WHERE KEY2=?;

decodeURIComponent後把+號改空白顯示

前後端資料拋接要避開依些特殊符號的異常或資安檢核可透過URLEncoder來轉碼,不過特殊符號在decode後會變+號造成解譯上的困擾,這時候加上.replace(/\+/g, ' ') 即可。

JAVA端

rtnval.setDatas(URLEncoder.encode(gson.toJson(tablelist), "UTF-8" ));

JS端

call_ajax($('#QueryForm').attr('action'), $('#QueryForm').serialize(), e)

.done(function(data){

$('#rtn_tbody').html(decodeURIComponent(data.datas).replace(/\+/g, ' '));

})

.fail(function(){

alert('ajax call fail.');

});

}