为什么Base64字符串在消息框中显示为空?

时间:2019-05-28 07:24:24

标签: asp.net vb.net base64 msgbox

在提交表单之前,我必须将一些HTML源代码编码为base64格式,然后将其解码回后面的代码中的原始代码。这是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)

并且我在客户端脚本中为alert()添加了encodedSourceCode

结果证明是:

第一个MsgBox:空

第二个MsgBox:“ System.String”

最后一个MsgBox:原始HTML源代码

并且JS警报对话框显示base64字符串,该字符串由一堆数字和字母组成。

简而言之,一切都很好,除了第一个MsgBox,它应该是base64编码的字符串,但原来是空的。为什么?正常吗?

实际上这并不重要,因为即使最终结果(解码后)似乎也没有问题,但是我很好奇为什么没有显示中期结果。

2 个答案:

答案 0 :(得分:2)

我想,似乎字符串太长而没有“可包装”字符。 MsgBox切掉了“最后一个单词”,什么也没显示。
这可以确认这一点:

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

在LinqPad中进行测试,我得到了大约43.000个字符的限制:

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

第一个:显示文字。
2nd:显示一个空框,长度= 44.000
3rd:显示文本,尽管总长度为44.001,但可以在空格处包裹。

答案 1 :(得分:0)

它与base64字符串绝对无关,因为它们是简单的字符串。这是证明:

    Dim myString = "Hello world, this is just an ɇxâmpŀƏ ʬith some non-ansi characters..."
    Dim myEncoding As Encoding = Encoding.UTF8
    MsgBox(myString)
    Dim myBase64 = Convert.ToBase64String(myEncoding.GetBytes(myString))
    MsgBox(myBase64)
    Dim myStringAgain = myEncoding.GetString(Convert.FromBase64String(myBase64))
    MsgBox(myStringAgain)
    MsgBox(If(StringComparer.Ordinal.Equals(myString, myStringAgain), "same", "different"))

MsgBox(Convert.ToString(HttpContext.Current.Request.Form("encodedSourceCode").GetType()))

由于将类型的名称转换为字符串(请参见xxx.GetType()),因此会导致“ System.String”。