我有很多CCSID(0,37,819,1200,1252等)的IFS文件,我的任務是編寫一個簡單的RPGLE [1]程序,它將允許用戶查看任何這些文件的內容。我們的系統(V6R1)CCSID(DSPSYSVAL QCCSID)是65535 [2],我們的作業有一個默認的CCSID爲37,這意味着當我嘗試顯示CCSID 819(ASCII)時,例如,我看到垃圾 - 符號,隨機顏色等如何以編程方式確定IFS中文件的CCSID?
我熟悉通過QtqIconvOpen API將數據從一個CCSID轉換到另一個,所以如果我知道一個文件的CCSID不同於我們的默認CCSID,我可以將其轉換。我多年前編寫代碼來做到這一點,它工作正常。
我的問題是編程找出IFS文件的CCSID。在Google搜索之後,我發現的唯一相關信息是來自JamesA的Stackoverflow(How to determine the CCSID used in CPYFRMIMPF command?),他指出您可以在QSHELL中執行「ls -S」以獲取顯示其CCSID和文件名的文件列表。
因此理論上我可以執行ls -S filename
,解析輸出以獲取CCSID,然後使用該CCSID在必要時執行數據轉換。這是一個醜陋的黑客攻擊,如果可能的話,我更願意使用IBM API。
有沒有人知道這樣一個API或比解析ls -S filename
上市更優雅的黑客? [1]我使用C API的open()
,read()
和close()
來做實際的數據讀取。
[2]我知道65535是一個糟糕的選擇,但我無能爲力。
正是我在找什麼,謝謝。 –