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

Far*_*zam 0 c# encoding json

我正在研究一个应该与MMO游戏服务器通信的客户端.客户端正在使用unity3d.我从服务器获取JSON格式的数据,我尝试以UTF8编码获取数据:

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

以及响应字符串内部的内容如下:

"\u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645"
Run Code Online (Sandbox Code Playgroud)

然后我尝试从JSON中获取所需的utf8字符串数据:

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

问题是当我记录字符串时:

Debug.Log("Jproperty :" + s2);
Run Code Online (Sandbox Code Playgroud)

我得到的只是这样的\ u secuences:

"\u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645"
Run Code Online (Sandbox Code Playgroud)

如果我首先在xy中输入相同的结果,我会得到很好的结果.另外我应该提一下,虽然我认为s2.length应该是11,但它是66.

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

Dus*_*gen 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 =
// ???? ????????
Run Code Online (Sandbox Code Playgroud)