javascript - 在聊天应用程序中发送本地语言消息时出现 UTF-8 问题?

标签 javascript ajax jsp servlets utf-8

在我的聊天应用程序中,我需要以本地语言发送消息。

当尝试向代理发送消息并在客户端准确显示时,它工作正常。

但在代理端显示 நà¯à®à¯à®à®³à¯ à®à®ªà¯à®ªà®à®¿ à®à®°à¯à®à¯à® ிறà¯à®°à¯à®à®³à¯ 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());


    }

提前致谢..

最佳答案

But at agent side in displays நà¯à®à¯à®à®³à¯ à®à®ªà¯à®ªà®à®¿ à®à®°à¯à®à¯à®à®¿à®±à¯à®°à¯à®à®³à¯ for நீங்கள் எப்படி இருக்கிறீர்கள்(in english - how are you)...

当 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"%> 

一旦你解决了这个问题,你就应该在 servlet 代码中添加另一行代码,第一个 request.getParameter() 之前调用 ever 以指示容器使用 UTF-8 对请求参数进行编码。

request.setCharacterEncoding("UTF-8");

另请注意 HTML <meta>当页面通过 HTTP 提供时,标记被使用。它很容易被忽略。它仅在最终用户将 HTML 输出保存到磁盘上的 HTML 文件然后通过 file:// 从磁盘重新打开时使用。网址。

关于javascript - 在聊天应用程序中发送本地语言消息时出现 UTF-8 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13476406/

相关文章:

php - 我应该如何通过 AJAX 发出长 PHP 请求,定期检查状态更新,并在请求取消时关闭脚本?

java - 如何使用 JSTL 迭代字符串映射中的列表和对象列表?

java - 从jsp获取List对象值到action类

javascript - 如何将json对象作为参数传递给另一个方法

Javascript 在页面上居中一个 div

javascript - 如何使用 jQuery 将 input[type=submit] 替换为 input[type=text]?

javascript - 尝试访问 json 响应时出现“未定义”

ajax - Asp Mvc3 webgrid 通过ajax进行分页和过滤

javascript - 将网站上的所有右键点击变成左键点击

javascript - 检查表单字段中的值是否超过某个数字