c#: UrlDecode()
1、源起:
KV需要解析从插件传来的URL网址,因为其可能经过编码,所以需要解码。
初用System.Web.HttpUtility.UrlDecode()这个函数,但根据用户环境crash场景,发现有.net framework库不全情况,即找不到System.Web.dll这个程序集。
居然有此等事情!
自写代码解析喽,在网上下载得System.Web源代码,抽离所需函数,满足需求,项目可以舍弃对System.Web的引用
2、UrlDecode(string str)
直贴代码以做备忘:
public static string UrlDecode(string str)
{
return UrlDecode(str, Encoding.UTF8);
} static void WriteCharBytes(IList buf, char ch, Encoding e)
{
if (ch > )
{
foreach (byte b in e.GetBytes(new char[] { ch }))
buf.Add(b);
}
else
buf.Add((byte)ch);
} static int GetInt(byte b)
{
char c = (char)b;
if (c >= '' && c <= '')
return c - ''; if (c >= 'a' && c <= 'f')
return c - 'a' + ; if (c >= 'A' && c <= 'F')
return c - 'A' + ; return -;
} static int GetChar(string str, int offset, int length)
{
int val = ;
int end = length + offset;
for (int i = offset; i < end; i++)
{
char c = str[i];
if (c > )
return -; int current = GetInt((byte)c);
if (current == -)
return -;
val = (val << ) + current;
} return val;
} static string UrlDecode(string s, Encoding e)
{
if (null == s)
return null; if (s.IndexOf('%') == - && s.IndexOf('+') == -)
return s; if (e == null)
e = Encoding.UTF8; long len = s.Length;
var bytes = new List<byte>();
int xchar;
char ch; for (int i = ; i < len; i++)
ch = s[i];
if (ch == '%' && i + < len && s[i + ] != '%')
{
if (s[i + ] == 'u' && i + < len)
{
// unicode hex sequence
xchar = GetChar(s, i + , );
if (xchar != -)
{
WriteCharBytes(bytes, (char)xchar, e);
i += ;
}
else
WriteCharBytes(bytes, '%', e);
}
else if ((xchar = GetChar(s, i + , )) != -)
{
WriteCharBytes(bytes, (char)xchar, e);
i += ;
}
else
{
WriteCharBytes(bytes, '%', e);
}
continue;
} if (ch == '+')
WriteCharBytes(bytes, ' ', e);
else
WriteCharBytes(bytes, ch, e);
} byte[] buf = bytes.ToArray();
bytes = null;
return e.GetString(buf);
}
3、简单验证
string url = "https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DLeghS9MH9xY";
url = UrlDecode(url);
Console.WriteLine(url); //url = https://www.youtube.com/watch?v=LeghS9MH9xY
c#: UrlDecode()的更多相关文章
- C++ URLDecode和URLEncode实现——仅限gb2312,非utf8
转载--http://blog.163.com/zhangjie_0303/blog/static/9908270620148251658993/ #include <iostream> ...
- Python 中的urlencode和urldecode
python中的urlencode与urldecode 发表于2013/11/13 16:04:09 79983人阅读 分类: python 当url地址含有中文,或者参数有中文的时候,这个算是很正 ...
- c# UrlEncode,UrlDecode
用 C# winform 处理 utf-8,gb2312编码转换方法 首先,在项目属性 的 应用程序——目标框架中,选择 .NET Framework 4 然后再添加引用——.NET 中选择 ...
- HttpUtility.UrlDecode
如果在 HTTP 流中传递如空格或者标点符号等字符,它们可能会错误地解释在接收端. URL 编码转换为字符实体等效项; 不允许在 URL 中的字符URL 解码反转的编码. 例如,在嵌入到要在 URL ...
- php中urldecode()和urlencode()
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%.urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原 ...
- 关于URLEnCode,URLDeCode,Base64,公钥私钥
1.Base64非常适合http.mime协议,所以在一些类似webservice中可以用Base64. 用法如下:传出去之前先 Convert.ToBase64String(encryptedByt ...
- urldecode解码方法
输入为带有urldecode转码文本,输出正常文本. //20130625 by zhangyl private string ConvertToString(string input) { inpu ...
- Server.UrlEncode与Server.UrlDecode(url传递中文的解决方案)
1.设置web.config文件.<system.web> ...... <globalization requestEncoding="gb2312" resp ...
- python(24)urlencode和urldecode
当url地址含有中文,或者参数有中文的时候,这个算是很难正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至‘/’做一下编码转换. 一.urlencode ur ...
- URLEncode与URLDecode总结与实现
URLEncode: 用于编码URL字符串,数字和字母保持不变,空格变为'+',其他(如:中文字符)先转换为十六进制表示,然后在每个字节前面加一个标识符%,例如:“啊”字 Ascii的十六进制是0xB ...
随机推荐
- Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
类的继承关系 Reader |__ BufferedReader.StringReader.InputStreamReader |__ FileReader Writer |__ BufferedWr ...
- [Shell]Bash基本功能:输入输出重定向
/*----------------------------------------------------------------------------------------------- @黑 ...
- Python读取图片尺寸、图片格式
Python读取图片尺寸.图片格式 需要用到PIL模块,使用pip安装Pillow.Pillow是从PIL fork过来的Python 图片库. from PIL import Image im = ...
- 24.类的加载机制和反射.md
目录 1类的加载连接和初始化 1.1类的加载过程 1.2类的加载器 1.2.1类的加载机制 1类的加载连接和初始化 1.1类的加载过程 类的加载过程简单为分为三步:加载->连接->初始化 ...
- hadoop-1(单机模式配置)
下一次的目标是: 把Hadoop的伪分布式配置出来 1:ssh免密码登陆第一步 2:安装java环境 3:安装hadoop2
- Android高级控件(下)
Chronometer计时器 常用的方法 getBase() 基准时间 setFormat 设置显示格式 start() 开始计时 stop() 停止计时 setOnChronometerListen ...
- 无法加载ISAPI 筛选器 当前配置只支持加载为 AMD64 处理器体系结构创建的映像
无法加载ISAPI 筛选器 当前配置只支持加载为 AMD64 处理器体系结构创建的映像 2011-11-9 0:18:49来源:本站原创作者:清晨320我要评论(0) 今天服务器的伪静态死活加载不上去 ...
- jekins的一些配置
GotPC_Excel_Branches丢弃旧的构建 svn http://devsvn.uuzuonline.com/GOT_PC_PRIVATE/config/trunk构建Execute she ...
- STO单没有取进FP,IN_SAELS_ORDER表无,但IN_PO_STO有
描述 :业务反馈STO单没有取进FP,经检查IN_SALES_ORDER表没有此单数据,但在IN_PO_STO表却有 跟进如下: 1.检查IN_PO_STO表是否有数据 '; 2.检查SAP_SALE ...
- js 中的原型prototype
每次创建新函数,就会根据规则为该函数创建一个 prototype 属性,该属性是一个指向函数原型对象的指针.并且原型对象都默认拥有一个 constructor 属性,该属性是一个指向那个新建函数的指针 ...