Почему мой http-ответ не может быть преобразован в целое число? - PullRequest
2 голосов
/ 18 апреля 2019

Я делаю UnityWebRequest из php-файла и получаю строку в качестве ответа (или я думаю, что это строка?).

Я пытаюсь разобрать возвращенный ответ, но он продолжает возвращать 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 как целое число, а при анализе ответа, который также равен «16», возвращается 0 ?? Что мне здесь не хватает.

Edit: Если я использую следующее заявление if, в которое оно никогда не входит, какова сделка?

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

Отладка "16,16"

1 Ответ

0 голосов
/ 18 апреля 2019

Я думаю, что у вас есть эта проблема из-за разных типов кодирования. Строка C # - UTF-16, а downloadHandler.text:

Возвращает байты из данных, интерпретируемых как строка UTF8

Вопрос также в том, как вы создаете свой ответ на сервере и передаются ли данные с правильной кодировкой и типом ответа.

Вы также можете сравнить каждый символ в каждой строке следующим образом: (int) str [0], чтобы проверить, есть ли скрытые символы или они имеют разные значения.

DownloadHandler.data предоставляет вам доступ к необработанным байтам, которые, я думаю, лучше использовать. Вы можете использовать BitConverter, чтобы получить int из байтового массива.

...