Tomcat8 UTF-8显示为问号



我已经看了好几天了,但还是不能解决这个问题!

Ok。我有一个web应用程序,使基于GET参数的字节数组,并将其发送到服务器。然后对回复进行解密,我有代码将其解析为JSON。

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

decryptedPayload是一个字节[]。

有些字符是外国字符,例如俄文或中文。这些只是不能通过get参数正确地发送,或者当我接收东西并打印出来时…

例如,这里有一个UTF-8字符当我尝试通过GET参数传递它时,我没有得到正确的响应。搜索=жhttp://185.112.249.77:9999/Api/搜索?正如您所看到的,ж被更改为?,然后不返回任何结果,如果该字符实际发送,它应该返回结果。

我正在使用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/测试?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

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

ж¤

¢

您的请求默认为:

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

尝试在Tomcat中设置所有字符编码为UTF8来测试。

和UTF-8转义您的请求,所以:

http://185.112.249.77:9999/Api/搜索?搜索= % u0436

上面的URL返回了大量json信息,并对这个搜索参数进行了编码。

您可以使用像这样的在线工具进行测试。

相关内容

  • 没有找到相关文章

最新更新