【问题标题】:Convert byte array to string in Asp.net在 Asp.net 中将字节数组转换为字符串
【发布时间】:2012-05-27 16:23:55
【问题描述】:

在Page1.aspx中,我有

byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
Response.Redirect("Page2.aspx?BytArray=" + byt,false);

TextBox1 的值为“mnop”。

现在在 Page2.aspx 我有下面的代码

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#: How can I safely convert a byte array into a string and back? 给出了答案 U3lzdGVtLkJ5dGVbXQ==

谢谢。

【问题讨论】:

    标签: asp.net c#-4.0


    【解决方案1】:

    原始请求并未将byt 转换为字符串——它只是将其用作字节。所以这一行:

    Response.Redirect("Page2.aspx?BytArray=" + byt,false);
    

    实际上是去这个网址:

    Page2.aspx?BytArray=System.Byte[]
    

    您需要将该行更改为:

    Response.Redirect("Page2.aspx?BytArray=" + HttpUtility.UrlEncode(System.Convert.ToBase64String(byt)), false);
    

    然后在回来的路上替换所有这些:

    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);
    

    只有这个:

    var byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);
    
    var x2 = Encoding.UTF8.GetString(byteArray);
    

    【讨论】:

      【解决方案2】:

      你不能。第一页的代码发送的不是字节数组的值,而是数据类型。 Request.QueryString["BytArray"]返回System.Byte[],所以无法取回原来字节数组的内容。

      如果不对它们进行进一步编码,就不能在 URL 中将字节作为数据发送。例如,您可以使用 base64:

      byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
      Response.Redirect("Page2.aspx?BytArray=" + Server.UrlEncode(Convert.ToBase64String(byt)), false);
      

      现在 URL 包含实际字节,因此可以获取它们:

      byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);
      string x = System.Text.Encoding.UTF8.GetString(byteArray);
      

      【讨论】:

        【解决方案3】:

        您不能将原始字节作为查询字符串发送。改用Base64 编码:

        byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
        string encoded = HttpUtility.UrlEncode(Convert.ToBase64String(byt));
        Response.Redirect("Page2.aspx?BytArray=" + encoded, false);
        

        然后将其取回:

        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 不是加密,而是编码。

        【讨论】:

          猜你喜欢
          • 2021-11-11
          • 1970-01-01
          • 2018-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多