如何自動識別判斷url中的中文參數是GB2312仍是Utf-8編碼?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Text.RegularExpressions; namespace ConsoleApplication2 {         class Program {                 public static string DecodeURL2(String uriString) {                         if (Regex.IsMatch(                                 HttpUtility.UrlDecode(uriString, Encoding.GetEncoding("iso-8859-1")),                                 @"^(?:[x00-x7f]|[xe0-xef][x80-xbf]{2})+$" // 若是不考慮哪些什麼拉丁文啊,希臘文啊。。。亂七八糟的外文,用這個短的正則                         )) {                                 return HttpUtility.UrlDecode(uriString, Encoding.GetEncoding("UTF-8"));                         } else {                                 return HttpUtility.UrlDecode(uriString, Encoding.GetEncoding("GB2312"));                         }                 }                 public static string DecodeURL(String uriString) {                         if (Regex.IsMatch(                                 HttpUtility.UrlDecode(uriString, Encoding.GetEncoding("iso-8859-1")),                                 @"^(?:[x00-x7f]|[xfc-xff][x80-xbf]{5}|[xf8-xfb][x80-xbf]{4}|[xf0-xf7][x80-xbf]{3}|[xe0-xef][x80-xbf]{2}|[xc0-xdf][x80-xbf])+$"                         )) {                                 return HttpUtility.UrlDecode(uriString, Encoding.GetEncoding("UTF-8"));                         } else {                                 return HttpUtility.UrlDecode(uriString, Encoding.GetEncoding("GB2312"));                         }                 }                 public static void Main(string[] args) {                         Console.WriteLine("----------------------------------------------");                         Console.WriteLine(DecodeURL(".net%bc%bc%ca%f5"));                         Console.WriteLine(DecodeURL(".net%e6%8a%80%e6%9c%af"));                         Console.WriteLine("----------------------------------------------");                         Console.WriteLine(DecodeURL("%B8%A7%CB%B3%C7%E0%CB%C9%D2%A9%D2%B5"));                         Console.WriteLine(DecodeURL("%E6%8A%9A%E9%A1%BA%E9%9D%92%E6%9D%BE%E8%8D%AF%E4%B8%9A"));                         Console.WriteLine("------------------↓↓↓下面的出問題↓↓↓------------------");                         Console.WriteLine(DecodeURL("%E8%81%94%E9%80%9A")); // 正常                         Console.WriteLine(DecodeURL("%C1%AA%CD%A8")); // 發生編碼誤認                         // 編碼誤認,並無好的解決方案,由於utf-8和gbk編碼結果存在交叉,  咱們都知道,記事本也都會出現這種狀況                         Console.WriteLine("------------------↑↑↑上面的出問題↑↑↑------------------");                         Console.WriteLine(DecodeURL2("%E8%81%94%E9%80%9A")); // 正常                         Console.WriteLine(DecodeURL2("%C1%AA%CD%A8")); // 不會誤認                         Console.WriteLine("----------------------------------------------");                         Console.ReadKey();                 }         } }
相關文章
相關標籤/搜索