c# - 为什么我的 http 请求响应不能解析成一个整数?

标签 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);

}

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

最佳答案

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

Returns the bytes from data interpreted as a UTF8 string

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

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

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

关于c# - 为什么我的 http 请求响应不能解析成一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55744824/

相关文章:

c# - 数据集中的枚举

c# - DateTime.ParseExact 抛出字符串格式错误 Unity3D

c# - Unity 3D射击和摧毁敌人不起作用

android - 命令调用失败 : : Unable to forward network traffic to device in Unity

java - 如何在 Spring MVC REST channel 中获取登录的用户名/主体?

http - Powershell 中是否有类似于 Python 中的 Requests 或 Ruby 中的 Mechanize 的任何 HTTP 库?

go - golang 中的 http HandleFunc 参数

c# - 处理具有多个子控件的用户控件的双击事件

c# - 在 C# 中枚举 Windows 语言的最佳方法是什么?

c# - 如何在 ASP.NET Core 中默认防止 CSRF