【问题标题】:Use accented characters with REST API parse在 REST API 解析中使用重音字符
【发布时间】:2016-01-11 03:09:03
【问题描述】:

我正在使用解析来发送推送消息。我创建了一个简单的工具来允许管理员向用户发送消息。

此函数工作正常,当我将“Você recebeu uma mensagem”之类的字符串传递给 pushMessage 变量时会出现问题。这是因为我使用了字符“^”。如果我在解析推送面板中使用相同的字符串,则会发送消息。

如何在 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;
}

【问题讨论】:

  • 在请求中发送之前,您是否尝试过对字符串进行编码?
  • @Alexander 不,我该怎么做?
  • 您能否进一步澄清这个问题?是不是 parse 不接受变音符号^?
  • @Ghasan 使用 "~" "´" "º" "^" 等字符时会出现问题,这在葡萄牙语中用于发送消息

标签: c# parse-platform


【解决方案1】:

在使用 JSON 时我会坚持使用 UTF-8。

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

并将正确的 ContentLength 放入依赖于编码格式的字节中:

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

完整示例Here

正如您在屏幕截图中看到的,“ê”字符在 UTF8 中以八进制值 \303\252 编码,您可以在 this table 中看到这对应于:LATIN SMALL LETTER E WITH CIRCUMFLEX

如果服务器无法解析它,那么它就有一个大问题,因为解析 UTF-8 就像互联网上的面包和黄油。

【讨论】:

  • 您已将此标记为答案。它对你有用吗?如果没有,那是什么原因造成的?
【解决方案2】:

您需要在发送前对 pushMessage 进行编码,并要求前端开发人员将消息属性解码为 JSON

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-29
    • 2016-04-18
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2015-10-05
    相关资源
    最近更新 更多