2015-08-13 90 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