WebObjects/Web 應用程式/開發/本地化和國際化
要為您的 WO 應用程式啟用 Unicode,請在您的應用程式建構函式中新增以下內容
WOMessage.setDefaultEncoding("UTF8");
這將告訴所有 WOResponse 和 WORequest 使用 UTF8(Unicode)。
然後您只需要告訴瀏覽器。讓所有 .wo 頁面在 HTML 中包含此元標記
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
很棒的小技巧 - 這裡有一個簡單的方法呼叫,您可以將其貼上到您的 Application 物件中,以自動實現上述結果
private boolean enableUTFEncoding = false;
public void enableUTFEncoding() {
enableUTFEncoding = true;
WOMessage.setDefaultEncoding(_NSUtilities.UTF8StringEncoding);
}
public WOResponse dispatchRequest(WORequest theRequest) {
WOResponse result = super.dispatchRequest(theRequest);
if( enableUTFEncoding && "text/html".equals(result.headerForKey("content-type")) ) {
result.setHeader("text/html; charset=UTF-8; encoding=UTF-8", "content-type");
}
return result;
}
不幸的是,如果您想在同一個表單中使用檔案上傳欄位和 UTF-8 編碼,則並非那麼容易。新增檔案上傳元件意味著您必須將表單的 enctype 設定為“multipart/form-data”。要強制多部分表單使用 UTF-8 編碼,通常需要 enctype 為“multipart/form-data; charset=UTF-8”,但 WO 無法識別此類表單為多部分表單。當您在瀏覽器中開啟表單時,您將收到“java.lang.IllegalArgumentException: This form is missing a 'enctype=multipart/form-data' attribute. It is required for WOFileUpload to work.” 錯誤。
為了確保在多部分表單中也支援 UTF-8,您必須將以下程式碼新增到您的 Application 物件中
public WORequest createRequest(String aMethod, String aURL, String anHTTPVersion, NSDictionary someHeaders, NSData aContent, NSDictionary someInfo)
{
WORequest newRequest = super.createRequest(aMethod, aURL, anHTTPVersion, someHeaders, aContent, someInfo);
newRequest.setDefaultFormValueEncoding(_NSUtilities.UTF8StringEncoding);
return newRequest;
}
為了使 WOFileUpload 元件正常工作,我還必須在應用程式中新增啟動引數 -WOUseLegacyMultipartParser true。此啟動引數強制解析所有表單值,第一次呼叫 WORequest.formValues 時。有關更多資訊,請參閱Apple 開發者文件。如果沒有 -WOUseLegacyMultipartParser true,我的應用程式使用 WOFileUpload 元件時會出現嚴重問題,因為繫結資料和filePath在表單 POST 後已被清空。
有了 Jesse 的程式碼和此擴充套件,您將能夠在您的 WO 應用程式中正確處理 UTF-8 字元資料。
如果您在您的 UTF-8 應用程式中使用本地化字串,您也可以檢視 Project Wonder 的ERXLocalizer 類。