Tomcat8 UTF-8显示为问号

时间:2015-10-21 21:20:17

标签: java tomcat utf-8 tomcat8

我已经阅读了几天,但无法解决这个问题!

确定。我有一个webapp,它根据GET参数生成一个bytearray并将其发送到服务器。然后解密回复,我有代码将其解析为JSON。

InputStream myis = new ByteArrayInputStream(decryptedPayload);
new Avatar(myis);

decryptedPayload是一个字节[]。

某些字符是外来字符,例如俄语或中文。这些只是不能通过GET参数正确发送,或者当我收到东西并打印出来时......

例如,这是一个UTF-8字符 当我尝试通过GET参数传递它时,我得不到适当的响应。 http://185.112.249.77:9999/Api/search?search=ж 正如您所看到的,ж已更改为?,然后返回无结果,就好像该字符实际已发送一样,它应返回结果。

我正在使用Tomcat8。关于如何解决这个问题的任何想法?

由于

更新

<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   <head>
     <title>Character encoding test page</title>
   </head>
   <body>
     <p>Data posted to this form was:
     <%
       request.setCharacterEncoding("UTF-8");
       out.print(request.getParameter("mydata"));
     %>

     </p>
     <form method="POST" action="test.jsp">
       <input type="text" name="mydata">
       <input type="submit" value="Submit" />
       <input type="reset" value="Reset" />
     </form>
   </body>
</html>

我在Localhost上做了这个,顺便说一句,它与我的生产服务器具有相同的配置。 http://localhost:8080/Api/test.jsp?mydata=жä 输出“发布到此表单的数据是:жä”所以它确实有效......

编辑2:

http://185.112.249.77:9999/Api/test?data=%D0%B6%C3%A4

@WebServlet("/test")
public class test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public test() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");

        response.getWriter().println(request.getParameter("data"));
    }

}

更新3

在servlet中我已将response.getWriter().println(request.getParameter("data"));更改为response.getWriter().println(request.getParameter("data") +"\n"+ "¢");,我现在有了这个输出:

  

жä

     

¢

一个

1 个答案:

答案 0 :(得分:0)

您的请求默认为:

Content-Type: application/json;charset=ISO-8859-1

尝试在Tomcat中将所有字符编码设置为UTF8以进行测试。

UTF-8可以逃避您的请求:жis%u0436

http://185.112.249.77:9999/Api/Search?search=%u0436

以上网址会以此搜索参数编码返回大量json信息。

您可以使用this one等在线工具进行测试。