2015-08-13 89 views
2

我在将Texture2D类型的图像转换为字节然后转换为字符串时遇到问题。当我执行以下操作时:Texture2D to byte [] to字符串

var myTextureBytes : byte[] = myTexture.EncodeToPNG(); 
Debug.Log(System.Text.Encoding.UTF8.GetString(myTextureBytes)); 

我刚刚得到"�PNG"的日志输出。为什么这么短?什么是问号? Unity不应该能够解释UTF-8字符吗?当我发送到我的NodeJS服务器时,它说SyntaxError: Unexpected token并崩溃了服务器。

回答

2

问题是,纹理的PNG表示的字节是不是UTF-8编码的,这是唯一的文本。

要将二进制数据转换为字符串,我会推荐base64编码。

var myTextureBytes : byte[] = myTexture.EncodeToPNG(); 
var myTextureBytesEncodedAsBase64 : String = System.Convert.ToBase64String(myTextureBytes); 
+0

另外您应该注意:Base64会将数据的大小增加25%。您应该能够以原始形式发送该数据作为后期数据,我会假设。但是我对NodeJS的理解是有限的,这可能是JS/NodeJS的限制。 –

+0

是的,以字节为单位发送给服务器会更好。 – JeanLuc

0

你试过用Default编码吗?

Debug.Log(System.Text.Encoding.Default.GetString(myTextureBytes)); 
+0

对不起,但这似乎没有工作:/相反,它只是打印出“‰PNG” – Waltari