跳转到内容

WebObjects/Web 应用程序/开发/本地化和国际化

来自 Wikibooks,开放世界中的开放书籍

要为您的 WO 应用程序启用 Unicode,请在您的应用程序构造函数中添加以下内容

 WOMessage.setDefaultEncoding("UTF8");

这将告诉所有 WOResponse 和 WORequest 使用 UTF8(Unicode)。

然后您只需要告诉浏览器。让所有 .wo 页面在 HTML 中包含此元标记

 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Jesse Barnum

[编辑 | 编辑源代码]

很棒的小技巧 - 这里有一个简单的方法调用,您可以将其粘贴到您的 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;
 }

Helmut Schottmüller

[编辑 | 编辑源代码]

不幸的是,如果您想在同一个表单中使用文件上传字段和 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 类。

华夏公益教科书