Oracle EBS在編碼方式為AL32UTF8時的注意事項


現如今的EBS系統中,為了推進國際化的進程,以及系統向全球化的擴展,在Oracle數據庫的編碼方式上漸漸從支持中國本土簡體中文的ZHS16GBK轉向了更趨於國際化的AL32UTF8編碼方式。但隨之而來在中國就會產生很多問題,例如:

  • 其他的外圍系統仍然使用簡體中文GB2312/ZHS16GBK編碼,在接口文件傳輸時由於編碼不一致而產生亂碼問題
  • Excel不兼容,簡體中文版的Excel在讀取文本文件時采用的是默認的簡體中文編碼方式打開,所以已UTF-8編碼的文件(如CSV文件)在打開時會產生亂碼問題

所以在中國的IT系統,一旦選擇采用了AL32UTF8的國際化編碼方式之后,了解一些編碼方式的區別以及常見問題的解決方法是非常必要的。

 

編碼方式

這里就不深入討論編碼的知識了,簡單闡述一下二者的不同之處,見如下表格:

編碼方式 隸屬於 一個中文字符所占字節 說明
ZHS16GBK ANSI 2 與所有隸屬於ANSI的編碼兼容
AL32UTF8 Unicode 3 與所有隸屬於Unicode的編碼兼容

 

 

 

所以二者屬於兩套字符集衍生出來的,所以並不兼容,需要顯示的進行轉碼才能正常顯示。

 

PLSQL/SQL客戶端的配置

客戶端配置需要考慮Oracle Client的所支持的語言和注冊表中NLS_LANG鍵值的設置。

  • Oracle客戶端需要安裝兼容64為的32位客戶端:win32_11gR2_client,具體請從Oracle官方網站上進行下載;
  • NLS_LANG的鍵值需要設置成“AMERICAN_AMERICA.AL32UTF8” 或者 “SIMPLIFIED CHINESE_CHINA.AL32UTF8

 

EBS基礎設置

請確保一下表格中列示的配置文件已經設置了正確的值:

配置文件名稱 設置層 配置文件值
FND: NATIVE CLIENT ENCODING SITE UTF8
ICX: Client IANA Encoding SITE Unicode (UTF-8)

 

 

 

當為文本類型輸出格式設置新的打開方式時,請確保“Allow Native Client Encoding”已經勾選。

 

報表類程序(HTML, HTML as EXCEL, PDF)

對於HTML的報表,需要在HTML頭上指定encoding為utf-8:<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

另外編碼方式可以用一下代碼動態從系統中獲取:

l_encoding := fnd_profile.value('ICX_CLIENT_IANA_ENCODING');

 

對於PDF輸出類報表,以上獲取編碼方式的方法仍然適用,並填充值XML的頭部:

<?xml version="1.0" encoding="utf-8"?>

 

另外,如果報表輸出的中文全部顯示成問號“?”,那么這種情況並不是編碼方式導致的,而是服務器上缺失了必要的字體文件,在后台運行如下腳本復制字體文件到指定目錄下:

#!/bin/sh
cp $FND_TOP/resource/ALBAN*.ttf $AF_JRE_TOP/lib/fonts

 

文件讀寫及外部接口兼容

1. 文件輸出

對於從Oracle生成並輸出的文本文件,默認的編碼方式肯定是UTF-8(無BOM)的。所以一旦目標系統的編碼方式是簡體中文的話,那么轉碼的步驟一定是必須的。我們可以從兩個階段入手進行轉碼。

第一個階段是在每一批寫入文件的數據在寫入文件之前強制利用CONVERT函數進行轉碼,如:

l_converted_str := CONVERT('你好', 'ZHS32GB18030');

 

第二個階段是就是在文件生成之后,利用相對高級的文本編輯器,如Notepad++,對文件進行轉碼UTF-8 -> ANSI

 

2. 文件讀取

與文件類似,只不過只能利用文本編輯器提前轉碼之后方能被Oracle處理。

 

Excel文件輸出和Export導出

utf-8格式的csv或分割符文件在excel打開會出現亂碼的情況:

                                       utf-8格式的文本文件

利用文本編輯器進行轉碼后方能正確顯示:

                                      ansi格式的文件

 

總結

1. 檢查配置文件和View Options是否設置正確

2. HTML格式報表記得要動態從系統中獲取encoding

3. PDF報表記得安裝字體

4. 輸出到外部的文件需要進行必要轉碼操作(convert函數或文本編輯器)

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM