如何将a转换byte[]为string?我每次尝试都会得到
System.Byte []
而不是价值.
另外,我如何获得十六进制而不是十进制的值?
我想base64编码数据把它放在一个URL中,然后在我的HttpHandler中解码它.
我发现Base64编码允许使用'/'字符,这会弄乱我的UriTemplate匹配.然后我发现维基百科有一个"修改过的Base64 for URL"的概念:
存在修改的URL变体Base64,其中不使用填充'=',标准Base64的'+'和'/'字符分别替换为' - '和'_',因此使用URL编码器/解码器不再需要,并且对编码值的长度没有影响,保留相同的编码形式,以便在关系数据库,Web表单和对象标识符中使用.
使用.NET我想修改我当前的代码,从基本的base64编码和解码到使用"修改的base64 for URL"方法.有没有人这样做过?
为了解码,我知道它开头是这样的:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Run Code Online (Sandbox Code Playgroud)
但是,我需要在结尾处添加一个或两个'='字符,这看起来有点复杂.
我的编码逻辑应该更简单一些:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
Run Code Online (Sandbox Code Playgroud)
我已经看到Guid to Base64用于URL StackOverflow条目,但是它具有已知长度,因此它们可以硬编码最后所需的等号数.
Azure TableStorage RowKeys中是否存在受限制的字符模式?我无法通过大量搜索找到任何记录.但是,我在一些性能测试中得到了这样的行为.
我有一些奇怪的行为,RowKeys包含随机字符(测试驱动程序确实阻止了受限字符(/ \#?)并阻止在RowKey中发生单引号).结果是我有一个RowKey,可以很好地插入到表中,但无法查询(结果是InvalidInput).例如:
RowKey: 9}5O0J=5Z,4,D,{!IKPE,~M]%54+9G0ZQ&G34!G+
Run Code Online (Sandbox Code Playgroud)
尝试通过此RowKwy(相等)进行查询将导致错误(在我们的应用程序中,使用Azure存储资源管理器和Cloud Storage Studio 2).我看了一下通过Fiddler发送的请求:
GET /foo()?$filter=RowKey%20eq%20'9%7D5O0J=5Z,4,D,%7B!IKPE,~M%5D%54+9G0ZQ&G34!G+' HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
看起来RowKey中的%54未在过滤器中转义.有趣的是,对于包含此RowKey的批处理XML中包含URI的表存储的批处理请求,我得到了类似的行为.我也看到RowKeys使用嵌入式双引号的类似行为,但我尚未分离出该模式.
有没有人陪我这个行为?我可以很容易地限制RowKeys中出现的其他字符,但是我们真的想知道"规则".