2013-10-10 34 views
0

使用手機發送的GCM信息不包含土耳其字符。下面的編碼沒有找到解決方案。Android gcm如何使用土耳其字符?

這樣我就會收到來自Android的消息。 Android的代碼

@Override 
protected void onMessage(Context context, Intent intent) { 
    String output = ""; 
    try { 
     output = new String(intent.getStringExtra("message").getBytes("8859_1"), "utf-8"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    generateNotification(context, output); 
} 

ASP.NET C#在這種方式,發送message.In此外,一個控制檯應用程序。 C#代碼

public string SendNotification(string deviceId, string message) 
{ 
    var utf8 = Encoding.UTF8; 
    byte[] utfBytes = utf8.GetBytes(message); 
    message = utf8.GetString(utfBytes, 0, utfBytes.Length); 

    string GoogleAppID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
    var SENDER_ID = "XXXXXXXXXXXXXXXXX"; 
    var value = message; 
    WebRequest tRequest; 
    tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send"); 
    tRequest.Method = "post"; 
    tRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; 
    tRequest.Headers.Add(string.Format("Authorization: key={0}", GoogleAppID)); 

    tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID)); 

    System.Web.HttpUtility.UrlEncode(message); 

    string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + message + "&data.time=" + 
    System.DateTime.Now.ToString() + "&registration_id=" + deviceId.ToString() + ""; 
    Console.WriteLine(postData); 
    Byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
    tRequest.ContentLength = byteArray.Length; 

    Stream dataStream = tRequest.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 
    dataStream.Close(); 

    WebResponse tResponse = tRequest.GetResponse(); 

    dataStream = tResponse.GetResponseStream(); 

    StreamReader tReader = new StreamReader(dataStream); 

    String sResponseFromServer = tReader.ReadToEnd(); 

    tReader.Close(); 
    dataStream.Close(); 
    tResponse.Close(); 
    return sResponseFromServer; 
} 

回答

0

此行似乎是錯誤的 - output = new String(intent.getStringExtra("message").getBytes("8859_1"), "utf-8");

我認爲,當你調用getBytes("8859_1")你失去土耳其字符。

嘗試output = intent.getStringExtra("message");

+0

它沒有奏效,土耳其人物消失。 – stronger

+0

設備ID的用途是什麼?我的意思是,我需要放在裏面嗎?謝謝! –

0

代碼解決了這個問題對土耳其字符。

public string SendNotification(string deviceId, string message) 
{ 
    var utf8 = Encoding.UTF8; 
    byte[] utfBytes = utf8.GetBytes(message); 
    message = utf8.GetString(utfBytes, 0, utfBytes.Length); 

    string GoogleAppID = "AIzaSyDlJwdWRKA-vO72ewwVcOxEklaBUwRybPI"; 
    var SENDER_ID = "1024375801813"; 
    var value = message; 
    WebRequest tRequest; 
    tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send"); 
    tRequest.Method = "post"; 
    tRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; 
    tRequest.Headers.Add(string.Format("Authorization: key={0}", GoogleAppID)); 

    tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID)); 

    System.Web.HttpUtility.UrlEncode(message); 

    string postData = string.Format("registration_id={0}&data.message={1}&collapse_key={2}", deviceId.ToString(), HttpUtility.UrlEncode(message), HttpUtility.UrlEncode("score_update")); 

    //string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + message + "&data.time=" + 
    //System.DateTime.Now.ToString() + "&registration_id=" + deviceId.ToString() + ""; 
    Console.WriteLine(postData); 
    Byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
    tRequest.ContentLength = byteArray.Length; 

    Stream dataStream = tRequest.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 
    dataStream.Close(); 

    WebResponse tResponse = tRequest.GetResponse(); 

    dataStream = tResponse.GetResponseStream(); 

    StreamReader tReader = new StreamReader(dataStream); 

    String sResponseFromServer = tReader.ReadToEnd(); 

    tReader.Close(); 
    dataStream.Close(); 
    tResponse.Close(); 
    return sResponseFromServer; 
}