C#過濾XML(十六進位值 0x1D)無效的字元

來源:互聯網
上載者:User

載入或儲存XML時引發的異常.System.ArgumentException: “”(十六進位值 0x1D)是無效的字元。

產生原因是xml檔案中包含低位非列印字元造成的

處理方法:在產生xml檔案的時候,過濾低位非列印字元

把一個字串中的 低序位 ASCII 字元 替換成 &#x  字元

轉換  ASCII  0 - 8  -> � -

轉換  ASCII 11 - 12 -> -

轉換  ASCII 14 - 31 -> -

return System.Text.RegularExpressions.Regex.Replace(HttpUtility.HtmlEncode(str),@"[\x00-\x08]|[\x0B-\x0C]|[\x0E-\x1F]", "");

 

        /// <summary>        /// 把一個字串中的 低序位 ASCII 字元 替換成   字元        /// 轉換  ASCII  0 - 8  -> � -         /// 轉換  ASCII 11 - 12 ->  -         /// 轉換  ASCII 14 - 31 ->  -         /// </summary>        /// <param name="tmp"></param>        /// <returns></returns>        public static string ReplaceLowOrderASCIICharacters(string tmp)        {            StringBuilder info = new StringBuilder();            foreach (char cc in tmp)            {                int ss = (int)cc;                if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))                    info.AppendFormat("{0:X};", ss);                else info.Append(cc);            }            return info.ToString();        }        /// <summary>        /// 把一個字串中的下列字元替換成 低序位 ASCII 字元        /// 轉換  � -   -> ASCII  0 - 8        /// 轉換   -   -> ASCII 11 - 12        /// 轉換   -  -> ASCII 14 - 31        /// </summary>        /// <param name="input"></param>        /// <returns></returns>        public static string GetLowOrderASCIICharacters(string input)        {            if (string.IsNullOrEmpty(input)) return string.Empty;            int pos, startIndex = 0, len = input.Length;            if (len <= 4) return input;            StringBuilder result = new StringBuilder();            while ((pos = input.IndexOf("", startIndex)) >= 0)            {                bool needReplace = false;                string rOldV = string.Empty, rNewV = string.Empty;                int le = (len - pos < 6) ? len - pos : 6;                int p = input.IndexOf(";", pos, le);                if (p >= 0)                {                    rOldV = input.Substring(pos, p - pos + 1);                    // 計算 對應的低位字元                    short ss;                    if (short.TryParse(rOldV.Substring(3, p - pos - 3), System.Globalization.NumberStyles.AllowHexSpecifier, null, out ss))                    {                        if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))                        {                            needReplace = true;                            rNewV = Convert.ToChar(ss).ToString();                        }                    }                    pos = p + 1;                }                else pos += le;                string part = input.Substring(startIndex, pos - startIndex);                if (needReplace) result.Append(part.Replace(rOldV, rNewV));                else result.Append(part);                startIndex = pos;            }            result.Append(input.Substring(startIndex));            return result.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.