Search code examples
asp.netvb.netbase64msgbox

Why is a Base64 string displayed as empty in Message Box?


I have to encode some HTML source code into base64 format before form submission, and then decode it back to original code in the code behind. Here is the testing code by MsgBox:

MsgBox(HttpContext.Current.Request.Form("encodedSourceCode"))
MsgBox(Convert.ToString(HttpContext.Current.Request.Form("encodedSourceCode").GetType()))
Dim b = Convert.FromBase64String(HttpContext.Current.Request.Form("encodedSourceCode"))
Dim html = System.Text.Encoding.UTF8.GetString(b)
MsgBox(html)

And I have added an alert() for encodedSourceCode in client script.

The results turn out to be:

First MsgBox: Empty

Second MsgBox: "System.String"

Last MsgBox: Original HTML source code

And the JS alert dialog shows the base64 string, which consists of a bunch of digits and alphabets.

In short, everything is fine, except the first MsgBox, which is supposed to be base64 encoded string but turns out to be empty. Why? Is it normal?

Actually it does not matter much because even the final result (after decoding) seems to have no problem, but I'm just curious why the interim result is not shown as what it's supposed to be.


Solution

  • It seems that the string is simply too long without 'wrappable' characters, I suppose. MsgBox cuts out the 'last word' and shows nothing.
    This may confirm it:

    dim test = HttpContext.Current.Request.Form("encodedSourceCode")
    MsgBox(test) ' empty
    test = test.Substring(0, 20)
    MsgBox(test) ' shows the first 20 characters
    

    Testing in LinqPad, I get the limit around 43.000 characters:

    MsgBox("".PadLeft(43000, "a"))
    MsgBox("".PadLeft(44000, "a"))
    MsgBox("".PadLeft(43000, "a") & " " & "".PadLeft(1000, "a"))
    

    1st: shows text.
    2nd: shows empty box, length = 44.000
    3rd: shows text, although the total length is 44.001, but wrappable at the space.