2016-01-11 2 views
0

Я использую синтаксический анализ для отправки push-сообщений. Я создал простой инструмент, позволяющий администраторам отправлять сообщения пользователям.Использование символов с акцентом с REST API parse

Эта функция работает нормально, проблема возникает, когда я передаю переменную pushMessage строку «Você recebeu uma mensagem». Это происходит потому, что я использую символ «^». Если я использую одну и ту же строку в панели синтаксического разбора, сообщение отправляется.

Как я могу разобрать строку, чтобы предотвратить эту проблему на C#?

Parse.cs

private bool PushNotification(string pushMessage, string title, string canais) 
    { 
     bool isPushMessageSend = false; 

    string postString = ""; 
    string urlpath = "https://api.parse.com/1/push"; 
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(urlpath); 
    /*postString = "{ \"channels\":"+ canais +", " + 
        "\"data\" : {\"alert\":\"" + pushMessage + "\"}" + 
        "}";*/ 
    /* postString = "{ \"channels\":"+ canais +", " + 
    "\"data\": {\"message\": \"" + pushMessage + "\",\"title\": \"" + title + "\",\"is_background\": false}}";*/ 
    postString = "{ \"channels\":" + canais + ", " + 
    "\"data\": {\"data\": {\"message\": \""+pushMessage+"\",\"title\": \""+title+"\"},\"is_background\": \"false\"}}"; 

    httpWebRequest.ContentType = "application/json"; 
    httpWebRequest.ContentLength = postString.Length; 
    httpWebRequest.Headers.Add("X-Parse-Application-Id", "xxxxxxxxxxxxxx"); 
    httpWebRequest.Headers.Add("X-Parse-REST-API-KEY", "xxxxxxxxxxxxxxx"); 
    httpWebRequest.Method = "POST"; 
    StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream()); 
    requestWriter.Write(postString); 
    requestWriter.Close(); 
    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
    try 
    { 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var responseText = streamReader.ReadToEnd(); 

      if(responseText.Contains("true")) 
      { 
       MessageBox.Show("Mensagem enviada com sucesso"); 
      } 

     } 
    }catch(Exception e) 
    { 
     MessageBox.Show("Problema ao enviar mensagem\nErro:"+e.ToString()); 
    } 

    reset(); 
    return isPushMessageSend; 
} 
+0

Вы пробовали кодирующую строку перед отправкой его в запросе? – Alexander

+0

@ Александр нет, как я могу это сделать? – JulianOliveira

+1

Можете ли вы прояснить проблему больше? Разве что этот разбор не принимает диакритический? –

ответ

1

Я бы прилипают к UTF-8 при работе с JSON.

httpWebRequest.ContentType = "application/json; charset=utf-8"; 

и поставить правильный ContentLength в байтах, который dependes формата кодирования:

httpWebRequest.ContentLength = Encoding.UTF8.GetBytes(postString).Length; 
StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream()); //UTF-8 by default 

Полный пример Here

enter image description here

Как вы можете видеть на скриншоте "Е" символ заключен в UTF8 с восьмеричными значениями \ 303 \ 252, и вы можете видеть в this table, что это соответствует to: LATIN SMALL LETTER E WITH CIRCUMFLEX

Если сервер не может разобрать это, это имеет большую проблему, так как разбор UTF-8 похож на хлеб и масло в Интернете.

+0

Этот anwser не работает для меня. – JulianOliveira

+0

Вы отметили это как ответ. Это сработало для вас? Если нет, что с этим не сработало? – Alexander

0

вам нужно будет кодировать pushMessage перед отправкой и попросить передний конец проявителя декодировать сообщение свойства в формате JSON

Смежные вопросы