C# Android和C之间的Base64 url安全编码和解码#
在我的android应用程序中,我使用C# Android和C之间的Base64 url安全编码和解码#,c#,android,base64,decode,encode,C#,Android,Base64,Decode,Encode,在我的android应用程序中,我使用java.util.Base64编码和解码,并使用标志URL\u SAFE和NO\u WRAP 但是,当我尝试在我的C#应用程序中使用HttpServerUtility.urltokencode对其进行解码时,我得到的是null。在这种状态下,我的编码字符串也无法在Android应用程序上解码 我错过了什么?URL\u SAFE标志是否确保Base64字符串没有+,/和任何额外的填充?为什么urltokenecode不接受Base64值 urltokenco
java.util.Base64
编码和解码,并使用标志URL\u SAFE
和NO\u WRAP
但是,当我尝试在我的C#应用程序中使用HttpServerUtility.urltokencode
对其进行解码时,我得到的是null
。在这种状态下,我的编码字符串也无法在Android应用程序上解码
我错过了什么?URL\u SAFE
标志是否确保Base64字符串没有+
,/
和任何额外的填充?为什么urltokenecode
不接受Base64值
urltokencode
返回null
,因为我传递的是字符串而不是UrlToken
在Android中,我坚持编码/解码的URL\u-SAFE
和NO\u-WRAP
Base64标志,我成功地将我的C应用程序更改为以URL\u安全的方式解码/编码
public string UrlEncode(string str)
{
if (str == null || str == "")
{
return null;
}
byte[] bytesToEncode = System.Text.UTF8Encoding.UTF8.GetBytes(str);
String returnVal = System.Convert.ToBase64String(bytesToEncode);
return returnVal.TrimEnd('=').Replace('+', '-').Replace('/', '_');
}
public string UrlDecode(string str)
{
if (str == null || str == "")
{
return null;
}
str.Replace('-', '+');
str.Replace('_', '/');
int paddings = str.Length % 4;
if (paddings > 0)
{
str += new string('=', 4 - paddings);
}
byte[] encodedDataAsBytes = System.Convert.FromBase64String(str);
string returnVal = System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes);
return returnVal;
}
有用的,谢谢。但是,是否有一种url安全编码的C版本不需要我们手动替换所有这些值(=,+,/)?请注意,将“str.replace”(“-”、“+”)和“str.replace”(“,”/”)替换为“str=str.replace”(“-”、“+”)和“str=str.replace”(“,”/”)。