如何使用JavaScript在SpringMVC中获得对JSP的Unicode响应

How to get Unicode response to JSP in Spring MVC using JavaScript

本文关键字:JSP Unicode 响应 JavaScript 何使用 SpringMVC      更新时间:2023-09-26

我想使用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> &nbsp;&nbsp;<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