【问题标题】:Why can not my http request response parse into an integer?为什么我的 http 请求响应不能解析成整数?
【发布时间】:2019-04-18 11:14:28
【问题描述】:

我正在从一个 php 文件创建一个 UnityWebRequest 并获取一个字符串作为响应(或者我认为它是一个字符串?)。

我正在尝试解析返回的响应,但它一直返回 0。我将提供所有代码并尝试,但似乎没有任何效果,一切都返回 0。

尝试1:

IEnumerator GetConversationID(int user_id)
{
    WWWForm conn = new WWWForm();
    conn.AddField("cmd", "get_users_conversation_id");
    conn.AddField("userid_php", user_id);

    UnityWebRequest response = UnityWebRequest.Post("http://katiawashere.gr/qr/func/get_user_info.php", conn);

    yield return response.SendWebRequest();

    int.TryParse(response.downloadHandler.text, out StaticHolder.user_convid);

    Debug.Log("This " + response.downloadHandler.text + "," + StaticHolder.user_convid);

}

调试“这 16,0”

尝试2:

IEnumerator GetConversationID(int user_id)
{
    WWWForm conn = new WWWForm();
    conn.AddField("cmd", "get_users_conversation_id");
    conn.AddField("userid_php", user_id);

    UnityWebRequest response = UnityWebRequest.Post("http://katiawashere.gr/qr/func/get_user_info.php", conn);

    yield return response.SendWebRequest();

    string m = response.downloadHandler.text;
    int.TryParse(m, out StaticHolder.user_convid);

    Debug.Log("This " + m + "," + StaticHolder.user_convid);

}

调试“这 16,0”

尝试 3:

IEnumerator GetConversationID(int user_id)
{
    WWWForm conn = new WWWForm();
    conn.AddField("cmd", "get_users_conversation_id");
    conn.AddField("userid_php", user_id);

    UnityWebRequest response = UnityWebRequest.Post("http://katiawashere.gr/qr/func/get_user_info.php", conn);

    yield return response.SendWebRequest();

    int.TryParse(response.downloadHandler.text.ToString(), out StaticHolder.user_convid);

    Debug.Log("This " + response.downloadHandler.text.ToString() + "," + StaticHolder.user_convid);

}

调试“这 16,0”

试试 4?????:

IEnumerator GetConversationID(int user_id)
{
    WWWForm conn = new WWWForm();
    conn.AddField("cmd", "get_users_conversation_id");
    conn.AddField("userid_php", user_id);

    UnityWebRequest response = UnityWebRequest.Post("http://katiawashere.gr/qr/func/get_user_info.php", conn);

    yield return response.SendWebRequest();

    int.TryParse("16", out StaticHolder.user_convid);

    Debug.Log("This " + response.downloadHandler.text + "," + StaticHolder.user_convid);

}

调试“这个 16,16”

所以我想我会失去理智。为什么解析“16”会返回 16 作为 int 但解析也是“16”的响应会返回 0?我在这里错过了什么。

编辑: 如果我使用下面的 if 语句,它永远不会进入,这是怎么回事?

m = response.downloadHandler.text;
n = "16";
if(m.Equals(n))
  Debug.Log("Equals");
Debug.Log(m + "," + n);

调试“16,16”

【问题讨论】:

  • 尝试将yield return 分成两行并将Debug.Log 添加到response.SendWebRequest() 的返回值。这可能会给你一些更深入的了解。
  • 尝试将字符串“t”设置为 response.downloadHandler.text.ToString(),然后解析它。
  • 不,仍然返回 0

标签: c# unity3d httprequest tryparse


【解决方案1】:

我认为你有这个问题是因为不同的编码类型。 C# String 是 UTF-16 而 downloadHandler.text:

从解释为 UTF8 字符串的数据中返回字节

问题还在于您如何在服务器上创建响应,以及数据是否以正确的编码和响应类型发送。

您还可以像这样比较每个字符串中的每个字符: (int) str[0] 以检查是否存在隐藏字符或它们是否具有不同的值。

DownloadHandler.data 让您可以访问我认为更好用的原始字节。您可以使用 BitConverter 从字节数组中获取 int。

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    相关资源
    最近更新 更多