【Unity3D】解决LitJson序列化中文不能正常显示的问题

第一种:自己最后转换下编码

System.Text.RegularExpressions.Regex.Unescape(String),命名空间:

        StringBuilder sb = new StringBuilder();
        JsonWriter writer = new JsonWriter(sb);
        writer.WriteObjectStart();

        writer.WritePropertyName("Name");
        writer.Write("小李子");

        writer.WritePropertyName("Sex");
        writer.Write("男");

        writer.WritePropertyName("Sex");
        writer.Write(44);

        writer.WritePropertyName("作品");
        writer.WriteArrayStart();
        writer.Write("《泰坦尼克号》");
        writer.Write("《禁闭岛》");
        writer.WriteArrayEnd();

        writer.WriteObjectEnd();
        string str = Regex.Unescape(sb.ToString());
        byte[] byte= Encoding.UTF8.GetBytes(str);

第二种:修改源代码

进入Write方法可以看到,有一个 PutString (str) 方法会对字符串进行处理。

 public void Write (string str)
        {
            DoValidation (Condition.Value);
            PutNewline ();

            if (str == null)
                Put ("null");
            else
                PutString (str);

            context.ExpectingValue = false;
        }

这个方法里会判断是否是字母和一些转义字符,如果不是就会处理为Unicode编码。

所以可以直接将这段代码注释,直接添加原字符串,不做判断

 private void PutString (string str)
        {
            Put (String.Empty);

            writer.Write ('"');

            //int n = str.Length;
            //for (int i = 0; i < n; i++)
            //{
            //    switch (str[i])
            //    {
            //        case '\n':
            //            writer.Write("\\n");
            //            continue;

            //        case '\r':
            //            writer.Write("\\r");
            //            continue;

            //        case '\t':
            //            writer.Write("\\t");
            //            continue;

            //        case '"':
            //        case '\\':
            //            writer.Write('\\');
            //            writer.Write(str[i]);
            //            continue;

            //        case '\f':
            //            writer.Write("\\f");
            //            continue;

            //        case '\b':
            //            writer.Write("\\b");
            //            continue;
            //    }

            //    if ((int)str[i] >= 32 && (int)str[i] <= 126)
            //    {
            //        writer.Write(str[i]);
            //        continue;
            //    }

            //    // Default, turn into a \uXXXX sequence
            //    IntToHex((int)str[i], hex_seq);
            //    writer.Write("\\u");
            //    writer.Write (hex_seq);

            //}
            writer.Write(str);//不做判断,直接写入就行了。

            writer.Write ('"');
        }

 

你可能感兴趣的:(LitJson,Unity3d,unity,u3d,序列化,json,中文)