为什么 Base64 字符串在 Message Box 中显示为空?
Why is a Base64 string displayed as empty in Message Box?
我必须在提交表单之前将一些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)
并且我在客户端脚本中为 encodedSourceCode
添加了一个 alert()
。
结果是:
第一个 MsgBox:空
第二个消息框:"System.String"
最后一个 MsgBox:原始 HTML 源代码
并且 JS 警告对话框显示 base64 字符串,它由一堆数字和字母组成。
总之,一切都很好,除了第一个MsgBox,它应该是base64编码的字符串,但结果是空的。为什么?正常吗?
其实没什么大不了的,因为即使是最终结果(解码后)似乎也没有问题,但我只是好奇为什么中间结果没有按预期显示。
它绝对与 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()))
结果为 "System.String",因为您将类型的名称转换为字符串(参见 xxx.GetType()
)。
似乎字符串太长了,没有 'wrappable' 个字符,我想。 MsgBox
删除 'last word' 并且什么都不显示。
这可以证实:
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"))
第一个:显示文本。
第二:显示空框,长度 = 44.000
第三:显示文本,虽然总长度是44.001,但是可以在space.
处换行
我必须在提交表单之前将一些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)
并且我在客户端脚本中为 encodedSourceCode
添加了一个 alert()
。
结果是:
第一个 MsgBox:空
第二个消息框:"System.String"
最后一个 MsgBox:原始 HTML 源代码
并且 JS 警告对话框显示 base64 字符串,它由一堆数字和字母组成。
总之,一切都很好,除了第一个MsgBox,它应该是base64编码的字符串,但结果是空的。为什么?正常吗?
其实没什么大不了的,因为即使是最终结果(解码后)似乎也没有问题,但我只是好奇为什么中间结果没有按预期显示。
它绝对与 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()))
结果为 "System.String",因为您将类型的名称转换为字符串(参见 xxx.GetType()
)。
似乎字符串太长了,没有 'wrappable' 个字符,我想。 MsgBox
删除 'last word' 并且什么都不显示。
这可以证实:
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"))
第一个:显示文本。
第二:显示空框,长度 = 44.000
第三:显示文本,虽然总长度是44.001,但是可以在space.