這是我的服務器端代碼或android端代碼。 此代碼僅適用於英文消息。如果我像使用阿拉伯語一樣使用Unicode章程,那麼它不會顯示阿拉伯語。 由於英文阿拉伯文混合,它跳過唯一的阿拉伯章程。Android GCM unicode字符沒有收到
請給我解決方案。 謝謝!
這是我的C#代碼
private string SendNotification(string authstring, string id, string msg)
{
try
{
ServicePointManager.ServerCertificateValidationCallback = (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) => true;
WebRequest request = WebRequest.Create("https://android.googleapis.com/gcm/send");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
request.Headers.Add(string.Format("Authorization: key={0}", authstring));
string collaspeKey = Guid.NewGuid().ToString("n");
string postData = string.Format("registration_id={0}&data.payload={1}&collapse_key={2}", id, msg, collaspeKey);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
catch (Exception ex)
{
throw ex;
}
}
這是我的Android端代碼截獲該消息。
@Override
protected void onMessage(Context context, Intent intent) {
String message = ArabicUtilities.reshape(intent.getExtras().getString("payload"));
}
我不知道這是否是答案,我不是C#程序員。但根據我對你的代碼的理解,你並沒有對字符串進行編碼。例如'http://www.acom?q =某些數據'無效。你必須對產生「http://www.acom?q = some%20data」的「某些數據」進行編碼。我想你也必須編碼阿拉伯字符。在python中,我會使用'cgi.encode()'和Java'UrlEnconder.encode()'。我不知道C#中的等價物。 – 2012-08-03 04:53:41