为什么我的http请求响应无法解析为整数?

时间:2019-04-18 11:14:28

标签: c# unity3d httprequest tryparse

我正在从一个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);

}

调试“ This 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);

}

调试“ This 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);

}

调试“ This 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);

}

调试“ This 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”

1 个答案:

答案 0 :(得分:0)

我认为您有此问题,因为编码类型不同。在downloadHandler.text中,C#字符串为UTF-16:

  

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

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

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

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