在Asp.net开发中可以使用Server.HTMLEncode、Server.URLEncode将文本或URL的特殊字符进行编码,而在控制台或Winform程序开发中,却无法使用到这些方法。java
解决办法,以下:
右击项目-->添加引用-->.NET-->System.Web-->肯定。服务器
但在.net4.0的框架中,是无法找到System.Web的,可用以下方法解决:框架
右击项目-->添加引用,请切换到浏览标签,在 C:\Windows\Microsoft.NET\Framework\v2.0.50727 目录下找到,其中 v2.0.50727 是你实际使用的 .NET 版本。(必定要是这个,4.0目录下的无效)测试
System.Web.HttpUtility.HtmlEncode(str);编码
System.Web.HttpUtility.HtmlDecode(str);System.Web.HttpUtility.UrlEncode(str);System.Web.HttpUtility.UrlDecode(str);
编码后获得的字串和用Server.URLEncode编码获得的不同,那边接收到的也是乱码??url
编码时能够指定编码的,如System.Web.HttpUtility.UrlEncode(str,System.Text.Encoding.Unicode);System.Web.HttpUtility.UrlEncode(str,System.Text.Encoding.UTF8);System.Web.HttpUtility.UrlEncode(str,System.Text.Encoding.GetEncoding( "GB2312 "));解码也能够指定编码的System.Web.HttpUtility.UrlDecode(str,System.Text.Encoding.Unicode);System.Web.HttpUtility.UrlDecode(str,System.Text.Encoding.UTF8);
System.Web.HttpUtility.UrlDecode(str,System.Text.Encoding.GetEncoding( "GB2312 "));spa
但在C#里,HttpUtility.UrlEncode()转换出来的编码,到了客户端用JS的decode方法转换后,发现总有个"+"号,原来字符串是没有“+”号的。.net
经分析后,发现问题缘由在于,微软的HttpUtility.UrlEncode方法把【空格】转成"+"了( 若是原来是 "+" 则被转换成 "%2b" ) ,为了符合JS编码格式,把"+"替换成"%20"(%20为空格的urlencode编码)便可。code
如:orm
服务端:message= HttpUtility.UrlEncode(message,System.Text.Encoding.UTF8).Replace("+", "%20");
客户端:
decodeURIComponent(message);
PS:后来用JAVA也测试一下,发现JAVA的urlEncode方法没这个问题,java直接就把【空格】转成"%20"了 。
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
=======================================================================
url出现了有 “ +, 空格, /, ?, %, #, &, = ” 等8个特殊符号的时候,可能在服务器端没法得到正确的参数值,如何是好?
解决办法: URLencode字符转义
将这些字符转化成服务器能够识别的字符,对应关系以下:
+ URL 中+号表示空格 %2B
空格 URL中的空格能够用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D