如何使用XPAGES DesignerFacesServlet显示泰语字母(和另一个亚洲/阿拉伯字母)

问题描述 投票:0回答:1

我曾尝试创建XSP Servlet,并希望在我的Web应用程序中完全支持Thai(和/或其他亚洲/阿拉伯字母)。

此脚本是https://frostillic.us/blog/posts/159496067A27FD3585257A70005E7BC1的自定义版本

环境:Domino 9.0.1 FP6,Windows Server 2008

package com.testing.servlet;

import java.io.*;
import java.util.*;
import com.ibm.commons.util.StringUtil;
import com.ibm.xsp.webapp.DesignerFacesServlet;
import javax.faces.context.FacesContext;
import javax.servlet.*;
import javax.servlet.http.*;
import lotus.domino.*;


public class Testing extends DesignerFacesServlet {

    //Session
    private static Session getCurrentSession(FacesContext context) {
        return (Session) context.getApplication().getVariableResolver()
                .resolveVariable(context, "session");
    }

    private void incinerate(Object... dominoObjects) {
        for (Object dominoObject : dominoObjects) {
            if (null != dominoObject) {
                if (dominoObject instanceof Base) {
                    try {
                        ((Base)dominoObject).recycle();
                    } catch (NotesException e) {
                        System.out.println("[FAILED TO RECYCLE]");
                        e.printStackTrace();
                    }
                }
            }
        }
    }


    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletRequest req = (HttpServletRequest)servletRequest;
        HttpServletResponse res = (HttpServletResponse)servletResponse;
        ServletOutputStream out = res.getOutputStream();
        FacesContext facesContext = this.getFacesContext(req, res);
        Session session = null;
        Database database = null;
        View view = null;
        Document doc = null;
        try {
            session = getCurrentSession(facesContext);
            database = session.getCurrentDatabase();
            view = database.getView("lkBehavior");
            doc = view.getDocumentByKey("pBehavior");
            res.setContentType("text/plain");
            res.setCharacterEncoding("utf-8");
            out.println("start");
            Map<Object, Object> sessionScope = facesContext.getExternalContext().getSessionMap();
            sessionScope.put("counter", sessionScope.containsKey("counter") ? (Integer)sessionScope.get("counter") + 1 : 1);
            out.println("Counter: " + sessionScope.get("counter"));
            Map<String, String[]> param = req.getParameterMap();
            for(String key : param.keySet()) {
                out.println(key + " => " + StringUtil.concatStrings(param.get(key), ';', false));
            }
            out.println(doc.getItemValueString("values")); // field values contains thai letter
            out.println("done");            
        } catch(Exception e) {
            e.printStackTrace(new PrintStream(out));            
        } finally {
            out.close();
            incinerate(doc,view,database,session);
            if(facesContext!=null){
                facesContext.responseComplete();
                facesContext.release();
            }
        }
    }
}

结果

start
Counter: 5
???????????? // thai letter display as ????
done

如何显示泰文而不是????

java servlets xpages lotus-domino
1个回答
3
投票

在处理挪威字符时,我遇到了类似的问题。能够通过切换到PrintWriter而不是ServletOutputStream来修复它:

HttpServletResponse res = (HttpServletResponse) servletResponse;
HttpServletRequest req = (HttpServletRequest) servletRequest;

res.setContentType("application/json; charset=UTF-8;");

//use a PrintWriter here, since we also have to deal with UTF-8 characters
PrintWriter out = res.getWriter();

刚刚用泰语和阿拉伯语进行了快速测试,这似乎有效。

© www.soinside.com 2019 - 2024. All rights reserved.