【解决】UnityWebRequest 下请求 EXCEL数据 返回 PK 结果的解决方案

开发平台:Unity
编程平台:Visual Studio 2020以上
使用语言:C#

问题描述


  使用 UnityWebRequest 请求 Excel 数据内容,通过 Debug.Log(requests.downloadHandler.text)返回 PK 结果值问题。(注意:此处为.xlsx 的Excel表)

public IEnumerator GetExcelData()
{
	UnityWebReqeust requests = UnityWebRequest.Get(Application.StreamingAssets + "/MyData.xlsx");
	yield renturn requests.SendWebRequest();
	
	Debug.Log($"{requests.downloadHandler.text}");
}

问题分析:


  这似乎是 UnityWebReqeust 无法解析 .xlsx 格式数据的问题。暂未找到问题出现的原因。

解决方案


1)使用 Excel.DLL 库作为替代解决方案

using Excel;
using UnityEngine;

public class Example
{
	public IEnumerator GetExcelData(string path)
	{
		// .... 详见网络文章
	}
}

注意 以下情况:

  • xlsx 数据文本内所有单元格格式均需设置为 文本。否做应对 日期、货币等数据格式下,获取的数据信息是经处理后的数字内容。
  • xlsx 的访问是建立于 该对象未通过 EXCEL 软件打开为前提下进行。若后台存在访问数据表的应用正在运行,则提示 数据获取失败的 Error 报错。

2)使用 CSV 数据格式替代方案

操作方法:将原 .xlsx 数据表另存为 .csv 数据文件。通过 UnityWebRequest 可直接获取内容。

注意 以下情况:

  • csv 数据文件易出现编码格式错误的情况。应避免使用 Windows 内置编码格式进行转码。选择使用 Nodepad ++ 进行查看与编码。
  • csv 数据分类以 , 区别。不适用于部分文本内容存在 , 情况下的数据解析。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UnityWebRequestUnity 引擎提供的一种用于发送网络请求的类,它支持多种协议,包括 HTTP、HTTPS、FTP、File 等。下面是一个简单的例子,演示如何使用 UnityWebRequest 发送一个 GET 请求: ```csharp IEnumerator GetRequest(string url) { using (UnityWebRequest webRequest = UnityWebRequest.Get(url)) { yield return webRequest.SendWebRequest(); if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError("Error: " + webRequest.error); } else { Debug.Log("Response: " + webRequest.downloadHandler.text); } } } ``` 这里使用了 IEnumerator 和 yield 关键字,因为 UnityWebRequest 是异步执行的,需要使用协程来处理。 使用 UnityWebRequest 发送 POST 请求也很简单,只需要将上面的 GetRequest 方法修改为: ```csharp IEnumerator PostRequest(string url, string data) { byte[] bodyRaw = Encoding.UTF8.GetBytes(data); using (UnityWebRequest webRequest = UnityWebRequest.Post(url, "POST")) { webRequest.uploadHandler = new UploadHandlerRaw(bodyRaw); webRequest.downloadHandler = new DownloadHandlerBuffer(); webRequest.SetRequestHeader("Content-Type", "application/json"); yield return webRequest.SendWebRequest(); if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError("Error: " + webRequest.error); } else { Debug.Log("Response: " + webRequest.downloadHandler.text); } } } ``` 这里使用了 UploadHandlerRaw 将请求体转换为 byte 数组,并设置了 Content-Type 为 application/json。同时使用 DownloadHandlerBuffer 接收服务器响应的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值