阿里签名中URLEncode于C#URLEncod不同之处

转载 2017年11月15日 09:46:56

问题

QQ截图20170106155741

如上图所示,阿里云的PercentEncode 转换! 为 %21

PercentEncode 源码为:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
package com.aliyuncs.auth;
 
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
 
public class AcsURLEncoder {
    public final static String URL_ENCODING = "UTF-8";
     
    public static String encode(String value) throws UnsupportedEncodingException {
        return URLEncoder.encode(value, URL_ENCODING);
    }
     
    public static String percentEncode(String value) throws UnsupportedEncodingException{
        return value != null ? URLEncoder.encode(value, URL_ENCODING).replace("+", "%20")
                .replace("*", "%2A").replace("%7E", "~") : null;
    }
}
01
  

查找问题

第三方工具

01
<a href="http://images2015.cnblogs.com/blog/684558/201701/684558-20170106162851378-1970650580.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="QQ截图20170106160805" src="http://images2015.cnblogs.com/blog/684558/201701/684558-20170106162852784-188184266.png" alt="QQ截图20170106160805" width="644" height="170" border="0"></a>
01
  

上图表明的确没有转义!(感叹号)

 

C#中的URLEncode转义

C#中URLEncode,C#中有两种URLEncode,WebUlitity HttpUlitity

01
02
03
04
05
06
07
08
09
10
11
12
13
[TestFixture]
public class TestUlities
 {
     [Test]
     public void Test()
     {
         var url = @"http://img05.taobaocdn.com/bao/uploaded/TB2BVKlfFXXXXarXXXXXXXXXXXX_!!111708970-0-saturn_solar.jpg";
 
         var webUrlEncode = WebUtility.UrlEncode(url);
 
         var httpUrlEncode = HttpUtility.UrlEncode(url);
     }
 }

 

发现都没有转义!(感叹号)

 

WHY

 

In general URIs as defined by RFC 3986 (see Section 2: Characters) may contain any of the following characters:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=`.

Any other character needs to be encoded with the percent-encoding (%hh). Each part of the URI has further restrictions about what characters need to be represented by an percent-encoded word.

 

解决

QQ截图20170106173506

使用以下代码URLEncode 来进行URLEncode

 

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
public class AliUrlEncodeHelper
  {
      public static string Encode(string str)
      {
          return !string.IsNullOrEmpty(str) ?
              WebUtility.UrlEncode(str).Replace("+", "%20")
              .Replace("*", "%2A")
              .Replace("%7E", "~")
              .Replace("!", "%21")
              .Replace("'","%27")
              .Replace("(", "%28")
              .Replace(")", "%29")
              :str;
      }
  }

结论

阿里的URLEncode 有点过时,或者说自定义的,需要我们特殊处理。

 

附:阿里签名规则

image

 

参考

Which characters make a URL invalid?

Les codes hexas et unicode des caractères usuels, par Nicolas Hoffmann

阿里云签名机制



转载于          https://www.cnblogs.com/HQFZ/p/6256821.html


URLencode 特殊字符 转义 遇上的坑

在项目中遇到一个问题,在webveiw和原生之间进行传值的时候,出现了一些encode的小问题。看起来很简单的问题,实际上却存在不小的坑。   首先说一下目前项目的结构,在一个activity中...
  • VGWCIrO8NU
  • VGWCIrO8NU
  • 2017-03-03 09:21:28
  • 2348

C# Winform中 如何进行UrlEncode编码及解码

在Asp.net开发中可使用Server.HTMLEncode、Server.URLEncode 将文本或URL的特殊字符进行编码,而在控制台或Winform程序开发中,却没法使用到这些方法。 ...
  • u010820135
  • u010820135
  • 2017-12-23 11:18:45
  • 1226

在C#中使用server.UrlEncode() 方法

控制台或Winform程序中如何编码或解码Server.URLEncode2010年07月10日 星期六 23:03在Asp.net中可以使用Server.HTMLEncode和Server.URLE...
  • lploveme
  • lploveme
  • 2010-12-25 18:30:00
  • 36032

在C#中使用server.UrlEncode() 方法

在Asp.net中可以使用Server.HTMLEncode和Server.URLEncode 将文本或URL的特殊字符编码, 但在控制台或Winform程序中没有办法使用到这些方法, 解决办...
  • shenzhenlongman
  • shenzhenlongman
  • 2016-11-02 09:58:07
  • 863

C# httpwebrequest post 发送的数据 urlencode 问题

通过C# httpwebrequest post 数据的时候: 很多网站提交的数据都要System.Web.HttpUtility.UrlEncode(),只zhen参数,并不是整体。 例...
  • chen249191508
  • chen249191508
  • 2015-01-09 22:55:25
  • 704

C#实现UrlEncode (URL编码)

public static string UrlEncode(string str)         {             StringBuilder sb = new StringBuil...
  • songkexin
  • songkexin
  • 2012-02-18 13:00:00
  • 16021

阿里巴巴Java开发手册评述

2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范。随后进行了几次版本修订,目前的版本为v1.0.2版。下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/art...
  • VGWCIrO8NU
  • VGWCIrO8NU
  • 2017-03-03 10:03:09
  • 1067

看C#实现源码,可以参考算法 HttpUtility.UrlEncode

public static string UrlEncode(byte[] bytes, int offset, int count) { if (bytes == null) { return nu...
  • xiuzhentianting
  • xiuzhentianting
  • 2015-09-08 13:26:42
  • 275

C#版winform实现UrlEncode

控制台或Winform程序中如何编码或解码Server.URLEncode 在Asp.net中可以使用Server.HTMLEncode和Server.URLEncode 将...
  • xingxing513234072
  • xingxing513234072
  • 2013-08-05 17:05:03
  • 4984

C#版winform实现UrlEncode (URL编码)

分类:             c#              2012-07-19 16:36     603人阅读     评论(0)     收藏     举报     wi...
  • oMingZi12345678
  • oMingZi12345678
  • 2013-09-07 17:10:33
  • 1700
收藏助手
不良信息举报
您举报文章:阿里签名中URLEncode于C#URLEncod不同之处
举报原因:
原因补充:

(最多只允许输入30个字)