如何将utf8转换为真正的utf8?

时间:2014-02-05 19:49:06

标签: c# json encoding

我正在开发一个应该与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。

任何人都可以告诉我我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:5)

包含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 =
// معدن تیتانیوم