Java Tomcat+;Servlet+;Solr不正确的国际字符

Java Tomcat+;Servlet+;Solr不正确的国际字符,java,tomcat,solr,solrj,Java,Tomcat,Solr,Solrj,我有一个Solr4.0,它在PostgresDB中索引数据(包含多语言字符)。当我通过内置Jetty直接请求Solr时,我会得到JSON格式的正确响应。Tomcat7下运行着一个Servlet,负责处理对公共API的请求。此API通过HTTP获取请求,对执行请求的权限进行某种检查,然后使用solrj向Solr执行请求,然后将响应作为JSON发送。问题是,当我通过Servlet请求Solr时,我总是得到很多?????????国际字符所在位置的符号。DB中的所有数据都采用UTF-8编码,Tomcat

我有一个Solr4.0,它在PostgresDB中索引数据(包含多语言字符)。当我通过内置Jetty直接请求Solr时,我会得到JSON格式的正确响应。Tomcat7下运行着一个Servlet,负责处理对公共API的请求。此API通过HTTP获取请求,对执行请求的权限进行某种检查,然后使用solrj向Solr执行请求,然后将响应作为JSON发送。问题是,当我通过Servlet请求Solr时,我总是得到很多?????????国际字符所在位置的符号。DB中的所有数据都采用UTF-8编码,Tomcat的server.xml中的URIEncoding参数也是UTF-8。这是我在Servlet中编写响应的方式:

public void service(HttpServletRequest req, HttpServletResponse res) throws IOException
{
    PrintWriter writer = res.getWriter();
    String encoding = req.getCharacterEncoding();
    if(null == encoding)
    {
        req.setCharacterEncoding("UTF-8");
    }
    else
    {
        req.setCharacterEncoding(encoding);
    }   
    res.setContentType("application/json; charset=UTF-8");
    res.setCharacterEncoding("UTF-8");
    String key = req.getParameter(P_KEY);
    if (ps.isPartnerKey(key))
    {
        if (req.getMethod().equals(M_GET))
        {
            String query = req.getParameter(P_QUERY);
            String solr_json = SolrService.getInstance().query(query);
            //parse JSON for id's and get images
            if (solr_json != null)
            {
                writer.println(solr_json);
            }
        }
        if (req.getMethod().equals(M_POST))
        {
            String id = req.getParameter(P_ID);
            String field = req.getParameter(P_FIELD);
            String value = req.getParameter(P_VALUE);
            SolrService.getInstance().partialUpdate(id, field, value);
            fs.add(id, field, value, ps.getPartnerId(key));
        }
    }
    else
    {
        res.sendError(HttpServletResponse.SC_FORBIDDEN);
    }
    writer.close();
}
这就是我从Solr获取数据的方式:

 public String query(String query)
{
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.set("q", query!=null ? query : "*:*");
    solrQuery.set("wt", "json");
    String response = "";
    try
    {
        QueryResponse res = solr.query(solrQuery);
        response = res.getResults().toString();
        log.debug(response);
    }
    catch (SolrServerException e)
    {
        e.printStackTrace();
    }
    return response;
}

我做错什么了吗?可能是什么问题?

您正在提前调用getWriter。设置字符编码后调用它