Convert byte array to string in Asp.net
在page1.aspx中,我有
1 2 | byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text); Response.Redirect("Page2.aspx?BytArray=" + byt,false); |
textbox 1的值为"mnop"。
现在在page2.aspx中,我有下面的代码
1 2 3 4 5 6 7 8 9 10 11 | protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { var byteArray = System.Text.Encoding.UTF8.GetBytes(Request.QueryString["BytArray"]); var x1 = System.Convert.ToBase64String(byteArray, 0, byteArray.Length); var x2 = Encoding.UTF8.GetString(byteArray); } } |
x1 输出为u3lzdgvtlkj5dgvbxq==x2 输出为system.byte[]
但是如何让"mnop"回来呢?我错过了什么?
即使是C:如何安全地将字节数组转换为字符串并返回?回答为U3LZdgvtlkj5dgvbxq==
谢谢。
不能将原始字节作为查询字符串发送。尝试使用base64编码:
1 2 3 | byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text); string encoded = HttpUtility.UrlEncode(Convert.ToBase64String(byt)); Response.Redirect("Page2.aspx?BytArray=" + encoded, false); |
然后取回:
1 2 3 4 5 6 7 8 | protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]); string value = System.Text.Encoding.UTF8.GetString(byteArray); } } |
但是,当您可以直接按原样发送文本框的字符串值时(当然是在URL对其进行编码之后),我真的看不到转换为字节数组的整个练习的要点。如果这是一种隐藏用户真实值的方法,我希望您很清楚base64不是加密的,它是编码的。
最初的请求并没有将
1 | Response.Redirect("Page2.aspx?BytArray=" + byt,false); |
实际上是要访问这个网址:
1 | Page2.aspx?BytArray=System.Byte[] |
您需要将该行更改为:
1 | Response.Redirect("Page2.aspx?BytArray=" + HttpUtility.UrlEncode(System.Convert.ToBase64String(byt)), false); |
在回来的路上,把这些都换掉:
1 2 3 4 5 | var byteArray = System.Text.Encoding.UTF8.GetBytes(Request.QueryString["BytArray"]); var x1 = System.Convert.ToBase64String(byteArray, 0, byteArray.Length); var x2 = Encoding.UTF8.GetString(byteArray); |
就这样:
1 2 3 | var byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]); var x2 = Encoding.UTF8.GetString(byteArray); |
不能。第一页中的代码不会发送字节数组的值,而是发送数据类型。
如果不进一步对字节进行编码,则无法在URL中以数据形式发送字节。例如,您可以使用base64:
1 2 | byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text); Response.Redirect("Page2.aspx?BytArray=" + Server.UrlEncode(Convert.ToBase64String(byt)), false); |
现在,URL包含实际字节,因此可以获取这些字节:
1 2 | byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]); string x = System.Text.Encoding.UTF8.GetString(byteArray); |