【发布时间】:2022-01-13 23:28:51
【问题描述】:
我很流利,但我不确定我在这里做错了什么。我正在尝试从 Web 输出中获取数据,并通过“br /”和空格将其解析为数组。感谢您提前提供任何帮助。我在底部的string[] outputarray = ieoutput.Split(char.Parse("<br />")); 行收到错误“字符串必须恰好是一个字符长”。再次感谢。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class UserData : MonoBehaviour
{
// URL of your webserver
string weburl = "127.0.0.1";
string uid = "?uid=" + "219844";
string secret = "secret=" + "428032";
string php;
string output;
string[] outputarray;
void Start()
{
Read();
}
void Generate(){
if (PlayerPrefs.HasKey("uid"))
{
uid = PlayerPrefs.GetString(uid);
secret = PlayerPrefs.GetString(secret);
}
else {
StartCoroutine(newUser("newuser", weburl, "genuser.php"));
}
}
void Read()
{
php = "read.php";
StartCoroutine(readUser("read", weburl, "read.php", uid, secret));
}
IEnumerator newUser(string usage, string serverurl, string phpfile) {
string ieusage = usage;
string url = serverurl;
string iephp = phpfile;
if (ieusage == "newuser"){
UnityWebRequest www = UnityWebRequest.Get(url + "/userdata/" + iephp);
yield return www.SendWebRequest();
output = www.downloadHandler.text;
Debug.Log(output);
if (www.result != UnityWebRequest.Result.Success) {
Debug.Log(www.error);
}
}
}
IEnumerator readUser(string usage, string serverurl, string phpfile, string userid, string usersecret) {
string ieusage = usage;
string url = serverurl;
string iephp = phpfile;
string ieuid = userid;
string iesecret = usersecret;
string ieoutput = "";
if (ieusage == "read"){
UnityWebRequest www = UnityWebRequest.Get(url + "/userdata/" + iephp + ieuid + "&" + iesecret);
yield return www.SendWebRequest();
output = www.downloadHandler.text;
ieoutput = output;
Debug.Log(output);
if (www.result != UnityWebRequest.Result.Success) {
Debug.Log(www.error);
}
}
string[] outputarray = ieoutput.Split(char.Parse("<br />"));
for(int i = 0; i < outputarray.Length; i++)
{
Debug.Log(outputarray[i]);
}
}
// Update is called once per frame
void Update()
{
}
}
【问题讨论】:
-
char.Parse("<br />") -
好吧,不管它是什么代码,我可以向你保证,代码是完全不正确的——考虑到
Char.Parse的文档,我不同意你的自我评估,即你“非常流利”非常清楚,参数值中必须恰好有 1 个字符 - 异常消息是不言自明的。这表明您还不了解 character-value 是什么,这是编程中非常基本的单元,因此您不能“非常流利”。 -
在这种情况下,我强烈建议使用 JSON 之类的东西在 PHP 和 C# 之间交换数据。
-
只有 .NET Core 的 .NET Framework 中没有 string.Split(string)。他们正在使用 Unity3D,它使用 Mono,即 .NET Framework。从长远来看,手动解析字符串不是首选。他们应该创建一个简单的类来表示他们想要传输的数据(数据传输对象),并使用 JSON 进行序列化和反序列化。然后你使用对象而不是字符串。
-
@DSander Unity不使用
.Net Framework。他们使用“.Net 4.6等效”,它实际上支持.Net Standard 2.1and.Net Framework,所以string.Split(string)在Unity中绝对有效......也许你应该在说明这个答案的大部分内容是错误之前尝试并确认你所说的 - 编辑:好吧,标准 2.1 仅在 Unity 2021 之后才出现,在它只是标准 2.0 之前;)