如何判斷 AP 執行時的 CCSID ?(DSPCCSIDR)
由於 AP 有時需要執行於多國語言的環境,用於判斷 AP 的執行環境的語系有多種方式,
例如直接存取系統值 QCCSID,QCNTRYID 或 QLANGID,由於每一個 Job 的執行環境會因
上述系統值及 User Profile(使用者設定檔)的相對應參數而有所不同,所以有時需要知道
某些語系(Language)的預設 CCSID 為何?來設定相對應的 AP 語言。所以我們可以使用
系統所提供的國際語系相關的 API 請參考以下範例。相關詳細資訊請參照範例中的網頁連結。
File : QRPGLESRC
Member: DSPCCSIDR
Type : RPGLE
Usage : CRTBNDRPG DSPCCSIDR
OS Version : V5R2 以上
H DEBUG OPTION(*SRCSTMT:*NODEBUGIO) DFTACTGRP(*NO) ACTGRP(*CALLER)
*----------------------------------------------------------------
* http://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/apis/nls2.htm
*----------------------------------------------------------------
* Retrieve Language Identifiers (QLGRTVLI) API retrieves a list of
* language identifiers and their descriptions.
*----------------------------------------------------------------
D RtvLanguageID Pr ExtPgm('QLGRTVLI')
D RcvVar 32767a Options(*VarSize)
D RcvVarLen 10i 0 Const
D RcvFmt 8a Const
D ErrCode like(ApiError)
*----------------------------------------------------------------
* The Retrieve Default CCSID (QLGRTVDC) API
* retrieves the default CCSID given a language ID.
*----------------------------------------------------------------
D RtvDftCCSID Pr ExtPgm('QLGRTVDC')
D RcvCCSID 10i 0
D LngId 3 Const
D ErrCode like(ApiError)
**-- Api error data structure: ----------------------------------
D ApiError Ds
D AeBytPro 10i 0 Inz( %Size( ApiError ))
D AeBytAvl 10i 0 Inz
D AeMsgId 7a
D 1a
D AeMsgDta 128a
**-- RTVL0100 data structure: ----------------------------------
D RtvL0100Dta Ds
D RlBytRtn 10i 0
D RlBytAvl 10i 0
D RlNbrLngId 10i 0
D RlCcsidVal 10i 0
D RlStrOffset 10i 0
D RlLngIdRtv 4096a
* ... Language ID Information
D pLngIdRtv *
D LngIDRtv DS based(pLngIDRtv)
D LanguageID 3
D LanguageDsc 40
D DspStr S 52
D RcvCCSID S 10i 0
D Idx S 10i 0
* Retrieve Language List
C CallP RtvLanguageID(RtvL0100Dta
C : %Size( RTVL0100Dta)
C : 'RTVL0100'
C : ApiError
C )
* set Rtn Array Address
C Eval pLngIDRtv = %addr(RtvL0100Dta) +
C RlStrOffset
C For Idx = 1 to RlNbrLngId
* Retrieve Language default CCSID for given Language ID
C CallP RtvDftCCSID(RcvCCSID
C : LanguageID
C : ApiError
C )
C Eval dspStr = LanguageID +
C %subsT(%editc(RcvCCSID:'L'):6:5) +
C ' ' + LanguageDsc
C DspStr Dsply
C Eval pLngIDRtv = pLngIDRtv + 43
C Endfor
C
C Eval *InLR = *On
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期一, 11月 06, 2023
2004-06-28 如何判斷 AP 執行時的 CCSID ?(DSPCCSIDR)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言