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 类。