Unity Android lê xml para remover BOM

O Unity mantém a pasta StreamingAssets após o empacotamento do WebGL, mas o caminho do arquivo StreamingAssets não pode ser lido usando Application.streamingAssetsPath. Para ler corretamente os dados do arquivo StreamingAssets local, precisamos usar a classe UnityWebRequest.

A classe System.Uri, essa classe pode nos ajudar a construir melhor a uri, principalmente quando usando o caminho local, combinado com Path.Combine pode pegar melhor o caminho da Uri. Devido à diferença na plataforma, o caminho do Uri também é diferente:
Windows platform file:///D:/DATA/StreamingAssets/data.json
WebGl platform http://localhost/StreamingAssets/data.json
Android platform jar:file: ///data /app/xxx!/assets/data.json
Aplicativo da plataforma iOS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw

使用Path.Combine
(Application.streamingAssetsPath,
“.xml”));
var filePath = new System.Uri(Path.Combine(Application.streamingAssetsPath, “Settings.xml”));
Solicitação UnityWebRequest = UnityWebRequest.Get(filePath);
yield return request.SendWebRequest();
if (request.result!=UnityWebRequest.Result.Success)
{ UnityEngine.Debug.LogError("Falha ao baixar arquivo XML: " + request.error); quebra de rendimento; } else { byte[] responseData = request.downloadHandler.data; responseData=RemoveBom(responseData);//移除BOM string xmlData = Encoding.UTF8.GetString(responseData);








XmlDocumento doc= new XmlDocumento();
doc.LoadXml(xmlData);
XmlNodeList nodeList = doc.GetElementsByTagName(“noci”);

        foreach (XmlNode node in nodeList)
        {
            if ("ReceivePLC" == node.Attributes["key"].Value)
            {
                receiveIp = node.Attributes["receiveIp"].Value;
                receivePort = int.Parse(node.Attributes["receivePort"].Value);
            }
        }

private byte[] RemoveBom(byte[] data)
{ // A sequência de bytes UTF-8 BOM é EF BB BF byte[] bom = new byte[] { 0xEF, 0xBB, 0xBF };

    if (data.Length >= bom.Length && data[0] == bom[0] && data[1] == bom[1] && data[2] == bom[2])
    {
        byte[] result = new byte[data.Length - bom.Length];
        Array.Copy(data, bom.Length, result, 0, result.Length);
        return result;
    }

    return data;
}

Salvar caminho após modificação do xml doc.Save(uri.AbsolutePath)

Acho que você gosta

Origin blog.csdn.net/weixin_43780907/article/details/130763661
Recomendado
Clasificación