1

私のチャット アプリケーションでは、ローカル言語でメッセージを送信する必要があります。

エージェントにメッセージを送信しようとすると、正常に機能し、顧客側に正確に表示されます。

しかしエージェント側では நà¯à®à¯à®à®³à¯ à®à®ªà¯à®ªà®à®¿ à®à®°à¯à®à¯à®à®¿ à®±à¯à®°à¯à®à®³à¯ 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>

ジャバスクリプトでは、

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);
    }
}

私のサーブレットでは、

    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());


    }

前もって感謝します..

4

1 に答える 1

2

しかし、エージェント側のディスプレイでは、நà¯à®à¯à®à®³à¯à®à®ªà¯à®ªà®à®¿à®à®°à¯à®à¯à®à®¿ à®±à¯à®°à¯à®à®³à¯forநீங்கள்எப்படிஇருக்கிறீர்ர

ISO-8859-1を使用して、指定された文字をHTTP回線経由で送信する前にバイトにデコードするように誤って使用した場合、またはクライアントがISO-8859-1に取得した文字をエンコードするように誤って指示した場合、正確にこの結果が得られます。バイトから文字へ。証拠は次のとおりです。

System.out.println(new String("நீங்கள் எப்படி இருக்கிறீர்கள்".getBytes("UTF-8"), "ISO-8859-1"));

基本的に、サーブレットコンテナにUTF-8を使用して指定された文字をバイトにデコードし、クライアントにUTF-8を使用して取得したバイトを文字にエンコードするように指示する必要があります。それ以外の場合は、デフォルトでISO-8859-1になります。これは、応答に何かを書き込むに、サーブレットで次のように実行できます。

response.setCharacterEncoding("UTF-8");

参照:


具体的な問題とは関係なく、他にも潜在的なエンコーディングの問題があります。また、UTF-8を使用して応答をレンダリングするようにJSPに指示していません。を設定するだけ@page contentTypeでは不十分であり、も設定する必要があります@page pageEncoding。さらに、JSPのデフォルトはすでにであるため、単独で設定するだけで十分text/htmlです。

<%@ page pageEncoding="UTF-8"%> 

これを修正したら、UTF-8を使用してリクエストパラメータをエンコードするようにコンテナに指示するために、最初の呼び出しの前に、サーブレットコードに別の行を追加する必要があります。request.getParameter()

request.setCharacterEncoding("UTF-8");

また、ページがHTTP経由で提供される場合、 HTML<meta>タグは使用されないことに注意してください。それは明らかに無視されます。file://これは、エンドユーザーがHTML出力をディスク上のHTMLファイルに保存し、 URIによってディスクから再度開く場合にのみ使用されます。

于 2012-11-20T15:29:29.973 に答える