2014-09-23 32 views
1

我想使用javascript將Unicode發送到JSP頁面。我通過互聯網,但仍無法找到答案。它總是讓我看起來像'? ????」。請有人告訴我答案。如何在使用JavaScript的Spring MVC中獲得對Unicode的Unicode響應

這是我在控制器方法

@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> 
+0

你試過'encodeURIComponent'你的值嗎? – Mena 2014-09-23 10:13:09

+0

還沒有。你能告訴我該怎麼做。因爲我是這項工作中的新人。 – 2014-09-23 10:36:59

回答

2
byte[] bytesInUTF8 = result.getBytes("UTF-8"); 
String stringUsingUTF8 = new String(bytesInUTF8, "UTF-8"); 

這需要翻譯的Unicode字符串,它編碼使用UTF-8編碼字節,然後解碼回使用相同的編碼字符串。這是一次往返,stringUsingUTF8將始終與result完全相同,因此您可以放棄此操作。

return stringUsingUTF8; 

字符串從春季返回@ResponseBody方法獲得編碼的使用Servlet的默認編碼發送到瀏覽器。默認情況下,XMLHttpRequest需要UTF-8,但由於Servlet老舊可怕,該編碼不是UTF-8,而是ISO-8859-1,這幾乎不是你想要的。

要解決此問題,您可以設置自定義AnnotationMethodHandlerAdapterAbout this.

請注意,您的輸入也使用ISO-8859-1的Servlet默認值進行解碼。如果您需要接受非ASCII輸入以及輸出,則需要在web.xml中設置一個CharacterEncodingFilterAbout this.(注多POST形式和GET形式有進一步的併發症。在Servlet的字符編碼真的是一件很悲哀的事情。)

data : "input=" +input, 

這應該是encodeURIComponent(input),或者只是data: {input: input}讓jQuery的照顧,對你。否則像&%這樣的字符將會中斷。

+0

明確的答案。有用。謝謝@bobince – 2014-09-23 16:54:56

1

我相信你應該添加到您的JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 

下面是關於這一些很酷閱讀: http://www.joelonsoftware.com/articles/Unicode.html

+0

它顯示錯誤「服務器遇到阻止它履行此請求的內部錯誤()」 – 2014-09-23 10:27:53

+0

我是否必須更改Tomcat或其他地方的任何配置?這是我第一次在我的應用程序中使用Unicode。 – 2014-09-23 10:29:40

+0

內部錯誤(HTTP 500)的根本原因應該在您的Tomcat的stdout/catalina.out日誌中。 – theMarceloR 2014-09-23 10:32:23

相關問題