在我的聊天应用程序中,我需要以本地语言发送消息。
当尝试向代理发送消息并在客户端显示它时,它工作正常。
但是在代理方面的展示àà¨ààààààààà³à¯à®à®ªà¯à®ªà®à®®àààà°àààààààà ிறààà®°à¯à®à®³à¯forநீங்கள்எப்படிபடி்கிறீர்கள்(英文 - 你好吗)......
在我使用的jsp页面中,
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8; ">
<title>Initializer</title>
<link rel="stylesheet" type="text/css" href="css/login.css" />
<script type="text/javascript" src="javascript/login.js"></script>
</head>
<body>
<div><textarea id="textarea" rows="10" readonly></textarea></div>
<div>
<table>
<tr>
<td id="msg" class="fontStyle">message :</td>
<td id="msgvalue"><input size="40" type="text" id="message"
onkeydown="enterKey()" /></td>
<td style="width: 5%;"></td>
<td>
<center><input type="button" id="button3"
onclick="sendMessage()" value="Send" /></center>
</td>
</tr>
</table>
</div>
</div>
</body>
在java脚本中,
function sendMessage(){
clearInterval(timer);
timer = setInterval(function(){pingAction();},5000);
message = document.getElementById("message").value;
document.getElementById("message").innerText = "";
//document.getElementById("textarea").innerHTML = message;
//alert("---------->"+sessionId+userId+secureKey+message);
//alert("msg ---> : "+ message);
try
{
xmlhttp.onreadystatechange=function()
{
//alert("Status : "+xmlhttp.status+"\nreadyState : "+xmlhttp.readyState);
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//alert("Message ----> : "+xmlhttp.responseText.toString());
//alert("Decoded Message----> : "+decodeURIComponent(xmlhttp.responseText.toString()));
//var checkMsg = decodeURIComponent(xmlhttp.responseText.toString());
var checkMsg = xmlhttp.responseText.toString();
if(checkMsg != "null" && checkMsg != null){
//document.getElementById("textarea").innerHTML += checkMsg;
if(textarea.value == "")
textarea.value = checkMsg;
else
textarea.value += "\n"+ checkMsg;
}
}
};
xmlhttp.open("POST","SendMessageAction?sessionId="+sessionId+"&userId="+userId+"&securekey="+secureKey+"&message="+encodeURIComponent(message)+"&sid="+Math.random(),true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("charset","UTF-8");
xmlhttp.send();
}
catch(err)
{
alert(err.description);
}
}
在我的servlet中,
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
msg = request.getParameter("message");
//System.out.println("msg -----> : "+msg);
seckey = request.getParameter("securekey");
uid = request.getParameter("userId");
sessionId = request.getParameter("sessionId");
//counter =Integer.parseInt(request.getParameter("counter"));
counter = 1;
protocol = ApplicationInfo.flexProtocol;
message = new SendMessage();
message.send(msg, seckey, uid, sessionId, counter, protocol);
CustomerInfo customer = ApplicationInfo.customerDetails.get(uid);
out.print(customer.getMessage());
}
提前致谢..
答案 0 :(得分:2)
但是在代理方面的显示器上显示àà¨ààààààààààààààààªààààààààà®ààààà°ààààà àà®à®¿à®±ààà®°à¯à®à®³à¯forநீங்கள்எபஎபபடிபடிபடிஇருகஇருகஇருக((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
如果错误地使用ISO-8859-1将给定字符解码为字节,然后通过HTTP线传输,或者客户端被错误地指示为ISO-8859-1,则会得到完全正确的结果将检索到的字节编码为字符。这是证据:
System.out.println(new String("நீங்கள் எப்படி இருக்கிறீர்கள்".getBytes("UTF-8"), "ISO-8859-1"));
您基本上需要指示servlet容器使用UTF-8将给定字符解码为字节和客户端使用UTF-8将检索到的字节编码为字符。否则它将默认为ISO-8859-1。这可以在servlet中完成,如下所示,在之前向响应中写入任何内容:
response.setCharacterEncoding("UTF-8");
无关,您还有其他潜在的编码问题;您还没有指示您的JSP使用UTF-8呈现响应。仅设置@page contentType
是不够的,您还需要设置@page pageEncoding
。更重要的是,单独设置已经足够,因为JSP已经默认为text/html
。
<%@ page pageEncoding="UTF-8"%>
一旦你修复了它,那么你应该在第一次request.getParameter()
调用之前向servlet代码添加另一行,以指示容器使用UTF-8编码请求参数。
request.setCharacterEncoding("UTF-8");
另请注意,在通过HTTP提供网页时,HTML <meta>
标记不。它被忽略了。它仅在最终用户将HTML输出保存到磁盘上的HTML文件然后通过file://
URI从磁盘重新打开时使用。