2014-02-05 101 views
0

我正在開發一款應該與MMO遊戲服務器通信的客戶端。 客戶端正在使用unity3d。 我從JSON格式的服務器獲取數據,我試圖讓在UTF8編碼的數據:如何將類似utf8的字符串轉換爲真正的utf8?

string responseString = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8).ReadToEnd() 
JSONObject JOBJ = new JSONObject(responseString); 

,什麼是內響應字符串的樣子:

"\u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645" 

然後我試着獲得所需的UTF8字符串數據移出JSON的:

string xy = JOBJ["name"].ToString(); 
byte[] utf = System.Text.Encoding.UTF8.GetBytes(xy); 
string s2= System.Text.Encoding.UTF8.GetString(utf); 

問題是,當我登錄的字符串:

Debug.Log("Jproperty :" + s2); 

我得到的是帶有\ U secuences這樣的:

"\u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645" 

而如果我把同樣的結果在xy首先我會得到良好的效果。 另外我應該提到,雖然我認爲s2.length應該是11它是66.

任何人都可以告訴我我的代碼有什麼問題?

+1

這不是在所有我清楚你的意思是什麼「而如果我把同樣的結果在xy首先我會得到良好的效果。」 –

+0

我的意思是如果我定義了字符串xy =「\ u0645 \ u ....我可以在debug.log中看到正確的結果 – Farzam

+1

正確,這意味着某個東西的編碼是兩次,或者解碼失敗。看起來像?請編輯該問題。 –

回答

4

包含unicode轉義序列的字符串是完全有效的。您的數據在發送到服務器之前可能會被越獄。

嘗試Regex.Unescape

var nameEscaped = JOBJ["name"].ToString(); 
// nameEscaped = 
// \u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645 

var name = Regex.Unescape(nameEscaped); 
// name = 
// معدن تیتانیوم 
+0

非常感謝!它解決了我的問題。:) – Farzam

+0

只是哇。謝謝!現在我想知道它爲什麼工作 – minimanimo

相關問題