如何使用JavaScript在SpringMVC中获得对JSP的Unicode响应
How to get Unicode response to JSP in Spring MVC using JavaScript
我想使用javascript发送一个Unicode到JSP页面。我浏览了一下互联网,但仍然找不到答案。它总是向我展示一些类似"????"的东西。有人能告诉我答案吗。
这是我在控制器中的方法
@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)
$(document).ready(function(){
$("#submit").click(function(){
var input = $("#in").val();
$.ajax({
type : "POST",
url : "conv",
data : "input=" +input,
//contentType: 'text/plain; charset=utf-8',
success : function(response) {
$("#out").val(response)
},
error : function(e) {
alert('Error msg: ' + e);
}
});
});
$("#clear").click(function(){
$("#out").val("");
$("#in").val("");
});
});
这是我的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>
byte[] bytesInUTF8 = result.getBytes("UTF-8");
String stringUsingUTF8 = new String(bytesInUTF8, "UTF-8");
这将获取翻译后的Unicode字符串,使用UTF-8编码将其编码为字节,然后使用相同的编码将其解码回字符串。这是一次往返旅行,stringUsingUTF8
将始终与result
完全相同,因此您可以放弃此项。
return stringUsingUTF8;
从Spring @ResponseBody
方法返回的字符串将使用Servlet的默认编码进行编码,以便发送到浏览器。XMLHttpRequest默认情况下需要UTF-8,但由于Servlet又旧又可怕,所以编码不是UTF-8,而是ISO-8859-1,这几乎不是您想要的。
要解决此问题,可以设置自定义AnnotationMethodHandlerAdapter
。关于这个。
请注意,您的输入也使用Servlet默认值ISO-8859-1进行解码。如果你需要接受非ASCII输入和输出,你需要在web.xml中设置一个CharacterEncodingFilter
。(请注意,多部分POST表单和GET表单还有更复杂的问题。Servlet中的字符编码确实是一件非常可悲的事情。)
data : "input=" +input,
这应该是encodeURIComponent(input)
,或者只是data: {input: input}
,让jQuery为您处理这些问题。否则,像&
和%
这样的字符将断开。
我认为您应该将其添加到您的JSP:中
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
下面是一些很酷的阅读:http://www.joelonsoftware.com/articles/Unicode.html
- 使用JSP从服务器检索和显示图像
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- servlet中的请求对象,而不是从jsp接收参数值
- 使用Javascript生成包含JSP的HTML
- 转义在jsp's脚本
- 显示&作为&在jsp中使用angularjs而不使用ng-bind-html
- 无法呈现js unicode字符“u1F310”
- 在JSP中运行pdftk
- 使用javascript和jsp将数据插入到融合图中
- 如何将输入类型值或id从一个jsp传递到另一个jsp页面
- 在更改名称时,使用ajax jsp在下拉菜单中填充多个文件夹的数据
- 正在将unicode转换为十六进制
- 如何将KSC5601转换为unicode
- 在使用cq:include包含外部JS之前,如何在JSP中包含全局JS变量
- 如何将日期id从一个jsp传递到另一个jsp页面
- getting id from jsp
- Unicode字符未在HTML5画布中正确呈现
- 有更好的方法吗?(递归解析HTML unicode实体)
- 将多个参数从jsp页面传递给javascript函数
- 如何使用JavaScript在SpringMVC中获得对JSP的Unicode响应