問題描述:在使用XMLP做報表的過程中,經常會遇到亂碼的情況。
導致亂碼的原因有兩種:字元集的問題和字型定義的問題。
字元集引起的亂碼 :一般亂碼成不規則性的。
字型定義引起的亂碼:一般亂碼是規則的,一般為(反?)
一. 字元集的問題
解決方案:
1. 在PL/SQL中輸出XML時,頭資訊的編碼為:
output('<?xml version="1.0" encoding="' ||<br /> fnd_profile.value('ICX_CLIENT_IANA_ENCODING') || '"?>');
2. 修改EBS系統喜好設定: 客戶機字元編碼修改為:Unicode(UTF-8),修改喜好設定會影響到設定檔
FND: NATIVE CLIENT ENCODING的值。
3. 直接修改FND: NATIVE CLIENT ENCODING的值,使客戶機的編碼與伺服器保持一致。
4. 注意事項:
ORACLE的字元集命名(非國際標準)和XML規範(IANA國際標準)不一致,我們還不能直接根據Oracle的字元集來設定XML字元集,需要根據下表映射設定(也可以通過utl_gdk.charset_map來獲得映射關係):
二. 字型定義的問題
解決步驟:
1. 查看$OA_JRE_TOP/jre/lib/fonts目錄下是否包含類似ALBAN*.ttf 的檔案。
2. 如果沒有,從EBS的$FND_TOP/resource 下拷貝一份,
使用命令:
cp $FND_TOP/resource/ALBAN*.ttf $OA_JRE_TOP/jre/lib/fonts<br />
3. 重啟應用。問題就可以解決。
4. 原理:預設情況下,XMLP不支援中文,原因僅僅是缺少字型。因為XMLP採用Java編寫,理論上Java支援任何語種。EBS內建了中文字型,但沒有安裝到XMLP目錄。因此要做個拷貝.
5. XMLP預設輸出格式為HTML的時候,開啟時所使用的字型是$OA_JRE_TOP下的。使用EXCEL和PDF時使用的是$FND_TOP下面的字型