6

我正在使用 Unity 3D 的 WWW 发出 http 请求:http: //docs.unity3d.com/ScriptReference/WWW.html

似乎无论我试图访问什么样的数据,它每次都会返回:����。我试过 json 文件,我试过 php 只生成一个字符串。我似乎无法访问服务器上的值。

C#:

public string url = "http://www.onelittledesigner.com/data.php";

IEnumerator Start() {
    WWW www = new WWW(url);
    yield return www;

    if (!string.IsNullOrEmpty(www.error)) {
        Debug.Log(www.error);
    } else {
        Debug.Log(www.text);
    }

}

PHP:

<?php
  echo "textiness";
?>

注意: 我已成功使用 www.texture 从服务器中提取图像。但是, www.text 似乎不起作用。

4

2 回答 2

2

Copying answer from comment, with some additional tests. My results are in the comments. Note that using Default, ASCII or UTF8 does work on my machine - it also should on yours.

    // returned from www.bytes, copied here for readability
    byte[] bytes=new byte[]{116, 101, 120, 116, 105, 110, 101, 115, 115};

    string customDecoded=""; 
    foreach(var b in bytes)
        customDecoded+=(char)b; 

    Debug.Log(customDecoded); // textiness
    Debug.Log(System.Text.Encoding.Default); // System.Text.ASCIIEncoding
    Debug.Log(System.Text.Encoding.Default.GetString(bytes));  // textiness
    Debug.Log(System.Text.Encoding.ASCII.GetString(bytes));  // textiness
    Debug.Log(System.Text.Encoding.Unicode.GetString(bytes)); // 整瑸湩獥
    Debug.Log(System.Text.Encoding.UTF7.GetString(bytes)); // textiness
    Debug.Log(System.Text.Encoding.UTF8.GetString(bytes)); // textiness
    Debug.Log(System.Text.Encoding.UTF32.GetString(bytes)); // 整湩
    Debug.Log(System.Text.Encoding.BigEndianUnicode.GetString(bytes)); // 瑥硴楮敳

Please check if System.Text.Encoding.Default is ASCIIEncoding, maybe something changed the default value?

于 2014-07-25T10:44:13.900 回答
-2

我的回答假设此脚本附加到 MonoBehaviour。它不起作用的原因是因为您试图将Start方法变成协程,但只做了一半。

这是您需要做的

private void Start()
{
   StartCoroutine(StartCR());
}

IEnumerator StartCR() 
{
   WWW www = new WWW(url);
   yield return www;

   if (!string.IsNullOrEmpty(www.error)) {
    Debug.Log(www.error);
   } else {
    Debug.Log(www.text);
   }
}

Unity 将调用该Start方法,该方法又将正确调用您的协同 WWW 代码。这将等待您的网络响应完成,而不是什么都不返回。

于 2014-07-24T05:45:14.467 回答