我在java做chat project与Spring 3.x这就需要Multi-language support。(Spring + JSP + jQuery-AJAX + JSON)设置UTF-8问题的环境?
这是我所做的。
我的JSP有:
我web.xml有:
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
characterEncodingFilter
/*
在我Tomcat server.xml有:
我我Java environment有:
JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8
在我Spring-controller有:
@RequestMapping(value="sendMessage.html",method=RequestMethod.POST)
public @ResponseBody String sendMessage(HttpSession session,@RequestParam String intxnId,@RequestParam String message, HttpServletRequest request,HttpServletResponse response){
String contentType= "text/html;charset=UTF-8";
response.setContentType(contentType);
//response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "application/json; charset=UTF-8");
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("text/plain;charset=UTF-8");
System.out.println("Send Message UTF-8 ----------------- "+ message);
String json = null;
BasicChatProtocol protocol = CustomerManagement.protocol.put(intxnId, chatProtocol.getProtocol());
HashMap result = send.send(message, intxnId, protocol);
result.put("name",(String) session.getAttribute("nickName"));
ObjectMapper map = new ObjectMapper();
if(result.size()!= 0){
try {
json = map.writeValueAsString(result);
result.clear();
result = null;
System.out.println("Send Message :::::::: : "+json);
} catch (Exception e) {
e.printStackTrace();
}
}
return json;
}
我jQuery-AJAX将是:
function sendMessage(){
var intxnId = $("#hide").val();
var message = $("#message").val();
alert("send : \n intxnId : "+intxnId+"\nmessage : "+message);
$.ajax({
type: "POST",
cache: false,
url: contexPath + "/sendMessage.html",
async: true,
contentType: "application/x-www-form-urlencoded; charset=utf-8",
scriptCharset: "utf-8",
dataType: 'html',
data: "intxnId=" + intxnId +"&message="+ encodeURIComponent(message),
success: function(response){
if(response != null && response !="" && response !="null"){
var txt = '{"data":['+response+']}';
var json = eval ("(" + txt + ")");
for(i =0;i
var data = json.data[i];
var name = data.name;
var message = data.message;
var time = data.time;
alert("Name : "+name+"\nMessage : "+message+"\ntime : "+time);
var createHTML = send(name,message,time);
$("#messageDisplayArea").append(createcreateHTML);
};
}
},
error: function(e){
alert('Error: ' + e);
},
});
}
但是,当我将本地的语言信息அவர்களுக்கு(泰米尔语),我在alert box只拿到了???????和view page。
但我在控制台(SysOut in controller)和所有Special Characters工作得到local language。
注:我觉得我有response from the controller。因为这个问题时,我送message到controller我javascript alert得到了message as small boxes。但是,当response来了我得到?????在alert box。
我的控制台打印,
Send Message UTF-8 ----------------- அவர்களுக்கு
Mesge what I send :::: அவர்களுக்கு
Send Message :::::::: : {"message":"அவர்களுக்கு","time":"time","name":"Human"}
我不知道我错过了什么。我不使用任何data base。
希望我们的堆栈用户能给出更好的解决方案。很好的答案是肯定的赞赏。
+0
你在哪里得到那些??????字符?在弹簧控制器中,在控制台中?我很确定你的javascript发送的是wright字符 –
+0
在控制器'sysout'中,我在控制台中获取本地语言。但是在'alert box'和'view page'中,我得到'???? ?' –
+0
我想我有''controller'响应的问题。因为当我把'message'发送给'controller'时,''''''''''''在'但是当回应来临时,我得到了警告框中的'?????'。 –