Этот код странен для начала:
byte[] byteArray = Encoding.UTF8.GetBytes(value);
int indexBA = 0;
foreach (char item in value.ToCharArray())
{
byteArray[indexBA++] = (byte)item;
}
Вы преобразуете его в байтовый массив, используя кодировку UTF-8 ... и затем вы перезаписываете содержимое этого массива (или, по крайней мере, некоторые из содержимое этого массива) путем приведения каждого символа к байту, что фактически применяет кодировку ISO-Latin-1.
Затем вы конвертируете произвольные двоичные данные в строку, подобную этой:
byteArray = ms.ToArray();
System.Text.StringBuilder sB = new System.Text.StringBuilder(byteArray.Length);
foreach (byte item in byteArray)
{
sB.Append((char)item);
}
Не делайте этого. Это непрозрачные двоичные данные - шансы того, что создаваемая вами «строка» (опять же, эффективно созданная с помощью ISO-8859-1) может быть передана очень мало.
При кодировании произвольных двоичных данных в виде строки почти всегда следует использовать Base64:
string base64 = Convert.ToBase64String(byteArray);
Затем вы также используете данные в качестве данных формы в кодировке URL - несмотря на тот факт, что строка может довольно легко включать такие символы, как &
и %
, которые имеют особое значение в URL закодированный текст Не делай этого тоже.
Как правило, вы должны:
- Выберите, какую кодировку вы хотите использовать для преобразования исходного текста в двоичное. UTF-8 - хороший выбор здесь, поскольку он может представлять весь Unicode.
- Выполните сжатие (и нет, очистка должна не вызывать проблемы здесь, хотя вы также должны закрываться в любом случае - в идеале с помощью оператора
using
)
- Преобразуйте двоичные данные обратно в текст (если вы действительно должны это сделать), используя base64. Если вы собираетесь использовать это в качестве параметра URL, вам следует использовать безопасный для сети вариант base64, как описано на странице Wikipedia base64 .
Для распаковки вам, очевидно, потребуется выполнить преобразование base64 в двоичное перед распаковкой.
Если возможно, было бы значительно более эффективно (с точки зрения переданных данных) публиковать сжатые данные как двоичные данные , а не как параметр формы в кодировке URL.