我正在开发一个应该与MMO游戏服务器通信的客户端。 客户端正在使用unity3d。 我从服务器获取JSON格式的数据,并尝试以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"
然后我尝试从JSON中获取所需的utf8字符串数据:
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。
任何人都可以告诉我我的代码有什么问题吗?
答案 0 :(得分:5)
包含unicode转义序列的字符串完全有效。您的数据可能会在发送到服务器之前被转义。
var nameEscaped = JOBJ["name"].ToString();
// nameEscaped =
// \u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645
var name = Regex.Unescape(nameEscaped);
// name =
// معدن تیتانیوم