unity天气系统 中国天气网 gzip解码

Alora

Unity天气系统

描述代码

在协同里面用UnitywebRequest请求来获取的中国天气 网的数据解压
返回格式是xml 并且是gzip压缩过的

温馨提示:

如果使用www 请求方式 和HttpwwwRequest请求方式 打包发布WEBGL 在完成会直接崩溃 提示:未捕获得异常

如下异常代码

Uncaught abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/kripken/emscripten/wiki/Linking") at Error
    at jsStackTrace (blob:http://localhost/3f435328-613f-4332-a9e1-3f66e795c572:2:21759)
    at Object.stackTrace (blob:http://localhost/3f435328-613f-4332-a9e1-3f66e795c572:2:21930)
    at Object.onAbort (http://localhost/weatherSystem/5/Build/UnityLoader.js:4:9754)
    at abort (blob:http://localhost/3f435328-613f-4332-a9e1-3f66e795c572:2:464518)
    at _dlopen (blob:http://localhost/3f435328-613f-4332-a9e1-3f66e795c572:2:177123)
    at <anonymous>:wasm-function[45002]:0xcc8c67
    at <anonymous>:wasm-function[44551]:0xcb6dd3
   	................................

本人就在gzip 这个坑了蹲了三天

本人还是太年轻经验少

关于gzip解压可以看看这个地址
Unity GZIP解压 保姆级教程

上代码

  void Start()
    {
        StartCoroutine(OnHttpWeather());
    }

    public IEnumerator OnHttpWeather()
    {
        string url = "http://wthrcdn.etouch.cn/WeatherApi?citykey=101120101";

        UnityWebRequest request = UnityWebRequest.Get(url);

        yield return request.SendWebRequest();

        if (request.isHttpError || request.isNetworkError)
        {
            print("网络请求异常");
        }

        string str = "";//声明空字符串用来接收解压缩后的数据
        if (request.GetResponseHeader("Content-Encoding") != null && request.GetResponseHeader("Content-Encoding").ToLower().Equals("gzip"))
        {//判断是否被gzip压缩,是做解压缩操作,否直接接受text数据
            Stream ff = null;
            ff = new GZipStream(new MemoryStream(request.downloadHandler.data), CompressionMode.Decompress);
            using (StreamReader reader = new StreamReader(ff, Encoding.UTF8))
            {
                str = reader.ReadToEnd();
            }
        }
        else
        { 
            str = request.downloadHandler.text;
        }
        print(str);//输出解压缩后的字符串
    }

你可能感兴趣的:(Unity3D,unity3d,unity)