如何自动识别判断url中的中文参数是GB2312还是Utf-8编码?

摘要:
:[x00-x7f]|[xe0-xef][x80xbf]{2})+$“//如果你不考虑拉丁语和希腊语。。。
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();
                }
        }
}

免责声明:文章转载自《如何自动识别判断url中的中文参数是GB2312还是Utf-8编码?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第二章 进程同步(二)——> 重点Ubuntu20.04在host-only模式下实现连接网络下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python selenium 编码问题

#coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 返回百度页面底部备案信息 text = driver.find_element_by_id("cp").text print(tex...

ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别(转载)

原文出处:http://www.blogjava.net/xcp/archive/2009/10/29/coding2.html  最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总结网上一些朋友提供的 ascii,ISO-8859-1,unicode, utf8,gb2312,big5,gbk,gb18030等几种常区别.     1. ASC...

C++用iconv进行页面字符转换

在对HTML页面进行爬取时,总会遇到一些不同的编码,而我们通常都不会一一对这些编码进行处理,而是集体转换成相同的编码,也易于装入数据库。此时,iconv便成为一个很方便的工具。 iconv 头文件"iconv.h"。iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。 它的作用是在多种国际编码格式之间进行文本内码的转换。 li...

PHP乱码问题,UTF-8乱码常见问题小结 linux-windows 文件编码乱码问题

一.HTML页面转UTF-8编码问题 1.在head后,title前加入一行: <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> 顺序不能错,一定要在 显示的标题有可能是乱码! 2.html文件编码问题: 点击编辑器的菜单:“文件”->“另存为”,可...

Python学习笔记:字符编码原理和操作详解

一、电脑字符集的历史   1、电脑是如何将二进制与字符对应起来的?     我们知道,电脑底层只认识0和1的二进制数据,为了让电脑可以跟人类互动,我们使用8个二进制位(即1个字节)来对应一个更复杂的数字,     比如:使用二进制“01000001”来指代十进制“65”,也就是大写字母A     实际使用场景中,人类利用键盘打字符“A”时,实际上是打65这...

cmd黑窗口查询数据库中数据时中文乱码

1.打开cmd窗口,输入show variables like 'character_set_%'; 2.因为操作系统是中文操作系统,默认使用的字符集是GB2312,所以需要把输出窗口使用的字符编码改成gb2312才能够正常显示中文。 使用如下的命令设置输出窗口使用的字符编码:set character_set_results=gb2312;...