在提交表单之前,我必须将一些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编码的字符串,但原来是空的。为什么?正常吗?
实际上这并不重要,因为即使最终结果(解码后)似乎也没有问题,但是我很好奇为什么没有显示中期结果。
答案 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”。