[opencms-dev] Re:Double-byte support
石羽森
shiys at langhua.cn
Thu May 27 04:47:01 CEST 2004
Yes, opencms can support double-byte languages e.g. simplified chinese, but you have to change some source code.
The followings are what i did for simplified chinese:
1. Encoder.java:
add the following:
public static String changeEncoding(String input, String oldEncoding, String newEncoding) {
if ((oldEncoding == null) || (newEncoding == null)) return input;
if ((oldEncoding.trim()).equalsIgnoreCase(newEncoding.trim())) return input;
String result = input;
try {
result = new String(input.getBytes(oldEncoding), newEncoding);
} catch (UnsupportedEncodingException e) {
// return value will be input value
}
return result;
}
public static String escapeWBlanks(String source) {
if(source == null) {
return null;
}
StringBuffer ret = new StringBuffer();
String enc = source;
for(int z = 0;z < enc.length();z++) {
if(enc.charAt(z) == '+') {
ret.append("%20");
}
else if(enc.charAt(z) == '\r') {
ret.append("\\r");
}
else if(enc.charAt(z) == '\n') {
ret.append("\\n");
}
else {
ret.append(enc.charAt(z));
}
}
return ret.toString();
}
2. CmsMessages.java:
original: return m_messages.getString(keyName);
new: return Encoder.changeEncoding(m_bundle.getString(keyName), "ISO-8859-1", A_OpenCms.getDefaultEncoding());
A_OpenCms.getDefaultEncoding()="GB2312". The m_bundle's string is encoding in ISO-8859-1 by default, it should be changed into GB2312.
3. CmsWpMain.java:
original: xmlTemplateDocument.setData("message", "alert(unescape('BROADCAST:" + Encoder.escape(message, cms.getRequestContext().getEncoding()) + "'));");
new: xmlTemplateDocument.setData("message", "alert('BROADCAST:\\n" + Encoder.escapeWBlanks(message) + "');");
after this change, the messagebox can support simplified chinese and multi-line.
4. Set GB2312 as the default encoding in opencms.properties.
5. Set MySQL's default-character-set=gb2312.
I think these changes also work for other double-byte languages. Try it.
shi yusen/langhua.cn
More information about the opencms-dev
mailing list