java - Tomcat8 UTF-8 显示为问号

标签 java tomcat utf-8 tomcat8

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

好的。我有一个基于 GET 参数制作字节数组并将其发送到服务器的 webapp。然后回复被解密,我有将其解析为 JSON 的代码。

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

decryptedPayload 是一个 byte[]。

有些字符是外来字符,例如俄语或中文。这些只是没有通过 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>

我是在本地主机上做的,顺便说一句,它与我的生产服务器具有相同的配置。 http://localhost:8080/Api/test.jsp?mydata=жä 输出“发布到此表单的数据是:Zä”所以它确实按预期工作......

编辑 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"+ "¢"); 我现在有这个输出:

жä

¢

最佳答案

您的请求默认为:

内容类型:application/json;charset=ISO-8859-1

尝试将 Tomcat 中的所有字符编码设置为 UTF8对此进行测试。

而 UTF-8 转义你的请求,因此:ж 是 %u0436

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

上面的URL返回了很多用这个搜索参数编码的json信息。

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

关于java - Tomcat8 UTF-8 显示为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33269465/

相关文章:

java - 如何在填充的矩形内绘制字符串?

java - AEM 中的 parsys 组件和响应式布局有什么区别

java浮点有限性检查性能

matlab - 将unicode字符串写入Matlab中的文件

c# - 如何将unicode代码更改为char

Java:regionMatches 比较用户输入的两个字符串

java - 如何在 tomcat 服务器的 "display name"列中显示应用程序名称?

eclipse - IllegalArgumentException : The servlets named [AdminController] and [muShag. Private.controller.AdminController] 都映射到 url-pattern

tomcat - 联合连接测试异常

MySQL Workbench 系统变量差异