Почему строка Base64 отображается как пустая в окне сообщения? - PullRequest
1 голос
/ 28 мая 2019

Я должен закодировать некоторый исходный код 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"

Last MsgBox: оригинальный исходный код HTML

А в диалоговом окне предупреждения JS отображается строка base64, которая состоит из набора цифр и алфавитов.

Короче говоря, все в порядке, кроме первого MsgBox, который должен быть строкой в ​​кодировке base64, но оказывается пустым. Зачем? Это нормально?

На самом деле это не имеет большого значения, потому что даже конечный результат (после декодирования), кажется, не имеет проблем, но мне просто любопытно, почему промежуточный результат не отображается так, как это должно быть.

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Кажется, что строка слишком длинная без «обертываемых» символов. 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"))

1-й: показывает текст.
2-й: показывает пустое поле, длина = 44.000
3-й: показывает текст, хотя общая длина составляет 44,001, но можно обернуть в пробел.

0 голосов
/ 28 мая 2019

Это определенно не имеет ничего общего со строками 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()).

...