JSON資料的處理中的特殊字元

來源:互聯網
上載者:User

JSON資料的處理中的特殊字元

JSON現在是很常見的處理資料的方式了。但由於自己使用的是反射擷取資料,必須自己處理特殊字元,但總是發現有一些看不見的字元在前台

var obj = jQuery.parseJSON(msg);會轉換失敗。

例如如下在Vs中可以看到只有兩個字元

可實際上卻有三個字元,使用notepad++開啟<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140805/20140805091340214.jpg" alt="\">

一直不明白這些字元是如何進入資料庫的,但進入了,就必須處理,否則在前台就會轉換失敗,導致資料載入失敗。

很長時間以為是由於使用者複製了一些其他編碼的文字,在中文中沒有對應的編碼,導致的錯誤。這次又出現了,於是又仔細研究了一下,發現原來是ASCⅡ表中的控制字元!!

明白了這個處理自然就很簡單了。

後台反射轉化為JSON的代碼:

private static string getValue(T t, string pname) where T : class    {        Type type = t.GetType();        PropertyInfo pinfo = type.GetProperty(pname);        if (pinfo != null)        {            object v = pinfo.GetValue(t, null);            return v != null ? v.ToString() : "";        }        else        {            throw new Exception("不存在屬性" + pname);        }    }    protected static string ConvertFromModeTojson(T t, string columnInfos) where T : class    {        string[] cols = columnInfos.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);        System.Text.StringBuilder sb = new System.Text.StringBuilder(300);              string result = "{";        foreach (string col in cols)        {            string name = "\"{0}\":\"{1}\",";            string value = getValue(t, col);                       value = String2Json(value);            sb.Append(string.Format(name, col, value));        }                result += sb.ToString().TrimEnd(',');              result += "}";        return result;    }  ///       /// 過濾特殊字元      ///       ///       ///       private static string String2Json(String s)    {        StringBuilder sb = new StringBuilder();        for (int i = 0; i < s.Length; i++)        {            char c = s.ToCharArray()[i];            switch (c)            {                case '\"':                    sb.Append("\\\""); break;                case '\\':                    sb.Append("\\\\"); break;                case '/':                    sb.Append("\\/"); break;                case '\b':                    sb.Append("\\b"); break;                case '\f':                    sb.Append("\\f"); break;                case '\n':                    sb.Append("\\n"); break;                case '\r':                    sb.Append("\\r"); break;                case '\t':                    sb.Append("\\t"); break;                default:                    if ((c >= 0 && c <= 31)||c ==127)//在ASCⅡ碼中,第0~31號及第127號(共33個)是控制字元或通訊專用字元                    {                    }                                      else                    {                        sb.Append(c);                    }                    break;            }        }        return sb.ToString();    }

控制字元

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.