如何在SpringMVC中使用JavaScript获得对JSP的Unicode响应
我想使用javascript发送一个Unicode到JSP页面。我浏览了互联网,但仍然找不到答案。它总是向我显示类似于“??”的东西。谁能告诉我答案吗 这是我在控制器中的方法如何在SpringMVC中使用JavaScript获得对JSP的Unicode响应,java,javascript,spring,jsp,unicode,Java,Javascript,Spring,Jsp,Unicode,我想使用javascript发送一个Unicode到JSP页面。我浏览了互联网,但仍然找不到答案。它总是向我显示类似于“??”的东西。谁能告诉我答案吗 这是我在控制器中的方法 @RequestMapping(value = "/conv", method = RequestMethod.POST) public @ResponseBody String add(@RequestParam(value = "input", required = true) String input) throws
@RequestMapping(value = "/conv", method = RequestMethod.POST)
public @ResponseBody
String add(@RequestParam(value = "input", required = true) String input) throws UnsupportedEncodingException {
String result = Run.getTranslation(input);
log.info(result);
byte[] bytesInUTF8 = result.getBytes("UTF-8");
String stringUsingUTF8 = new String(bytesInUTF8, "UTF-8");
return stringUsingUTF8;
}
这是我的JavaScript代码(test.js)
这是我的JSP页面
<Doctype html>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="<c:url value="/resources/js/jquery.min.js"/>"></script>
<script src="<c:url value="/resources/js/test.js"/>"></script>
<!-- You can add resources to page like above, .css and .js should be in resources folder -->
</head>
<body>
<h1>Translator</h1>
<h4>Input</h4>
<textarea id="in" rows="5" cols="100"></textarea>
<br>
<h4>Output</h4>
<textarea id="out" rows="5" cols="100"></textarea>
<br><br>
<button id="clear"> Clear</button> <button id="submit"> Convert</button>
</body>
</html>
翻译
输入
输出
清除转换
我认为您应该在JSP中添加以下内容:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
这里有一些关于这方面的很酷的读物:
我认为您应该在JSP中添加以下内容:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
这里有一些关于这方面的很酷的读物:
这将获取已翻译的Unicode字符串,使用UTF-8编码将其编码为字节,然后使用相同的编码将其解码回字符串。这是一个往返过程,stringUsingUTF8
将始终与result
完全相同,因此您可以删除此项
return stringUsingUTF8;
Spring@ResponseBody
方法返回的字符串使用Servlet的默认编码进行编码,以便发送到浏览器。XMLHttpRequest默认使用UTF-8,但由于Servlet很旧而且很糟糕,所以编码不是UTF-8而是ISO-8859-1,这几乎不是您想要的
要解决此问题,可以设置自定义的注释方法HandlerAdapter
请注意,您的输入也使用Servlet默认值ISO-8859-1进行解码。如果需要接受非ASCII输入和输出,则需要在web.xml中设置CharacterEncodingFilter
。(注意,多部分POST表单和GET表单还有更多的复杂性。Servlet中的字符编码确实是一件非常令人伤心的事情。)
这应该是encodeURIComponent(input)
,或者只是data:{input:input}
,让jQuery为您处理这些。否则像&
和%
这样的字符将中断
这将获取已翻译的Unicode字符串,使用UTF-8编码将其编码为字节,然后使用相同的编码将其解码回字符串。这是一个往返过程,stringUsingUTF8
将始终与result
完全相同,因此您可以删除此项
return stringUsingUTF8;
Spring@ResponseBody
方法返回的字符串使用Servlet的默认编码进行编码,以便发送到浏览器。XMLHttpRequest默认使用UTF-8,但由于Servlet很旧而且很糟糕,所以编码不是UTF-8而是ISO-8859-1,这几乎不是您想要的
要解决此问题,可以设置自定义的注释方法HandlerAdapter
请注意,您的输入也使用Servlet默认值ISO-8859-1进行解码。如果需要接受非ASCII输入和输出,则需要在web.xml中设置CharacterEncodingFilter
。(注意,多部分POST表单和GET表单还有更多的复杂性。Servlet中的字符编码确实是一件非常令人伤心的事情。)
这应该是
encodeURIComponent(input)
,或者只是data:{input:input}
,让jQuery为您处理这些。否则,像&
和%
这样的字符将断开。您是否尝试过对您的值进行编码。你能告诉我怎么做吗。因为我是这方面的新手。你有没有尝试过encodeURIComponent
你的价值观?还是没有。你能告诉我怎么做吗。因为我是这项工作的新手,它向我显示了一个错误“服务器遇到了一个内部错误(),阻止了它完成这个请求”,我必须在Tomcat或其他地方更改任何配置吗?这是我第一次在我的应用程序中使用Unicode。内部错误(HTTP 500)的根本原因应该在Tomcat的stdout/catalina.out日志中。它向我显示错误“服务器遇到了一个内部错误(),使它无法满足此请求”我是否必须更改Tomcat或其他地方的任何配置?这是我第一次在应用程序中使用Unicode。内部错误(HTTP 500)的根本原因应该在Tomcat的stdout/catalina.out日志中。
data : "input=" +input,