Какова правильная кодировка для преобразования строки в массив байтов

StackOverflow https://stackoverflow.com/questions/1224070

Вопрос

У меня какая-то проблема с кодировкой в моем ASP.NET HttpHandler, который загружает файл.Содержимое файла передается в скрытой переменной формы с веб-страницы ColdFusion, которая использует нечто под названием "ToBase64".

В ColdFusion код, используемый для помещения содержимого файла в форму, выглядит следующим образом:

<cffile action="readBinary" file="#FileName#" variable="objBinaryData">
    <cfset b64file = #toBase64(objBinaryData)#>
<form name="sendToHandler" 
           action="http://myserver/mysite/UploadHandler.ashx" method="post">
   <cfoutput>
       <input type="hidden" name="objBinaryData" value="#b64file#" />

Когда мой UploadHandler.ashx опубликован, я получаю строку из формы следующим образом:

            string fileContent = context.Request.Form["objBinaryData"];

Далее я преобразую строку в массив байтов следующим образом:

            byte[] binData = StringToByteArray(fileContent, EncodingType.ASCII);

Вот функция, которую я использую для преобразования строки:

        public static byte[] StringToByteArray(string str, EncodingType encodingType)
    {
        System.Text.Encoding encoding = null;
        switch (encodingType)
        {
            case EncodingType.ASCII:
                encoding = new System.Text.ASCIIEncoding();
                break;
            case EncodingType.Unicode:
                encoding = new System.Text.UnicodeEncoding();
                break;
            case EncodingType.UTF7:
                encoding = new System.Text.UTF7Encoding();
                break;
            case EncodingType.UTF8:
                encoding = new System.Text.UTF8Encoding();
                break;
        }
        return encoding.GetBytes(str);
    }
public enum EncodingType
    {
        ASCII,
        Unicode,
        UTF7,
        UTF8
    }

Для меня очевидно, что вызов вышеупомянутой функции с помощью EncodingType.ASCII неверен, но я очень смущен тем, что было бы правильно?Каково правильное "соответствие" между "Base64", отправленным из ColdFusion, и способом, которым строка должна быть закодирована в .Net?

Пожалуйста, обратите внимание, что весь код "работает", но последующее извлечение файла показывает, что он зашифрован, и я почти уверен, что у меня здесь неправильная кодировка.

РЕДАКТИРОВАТЬ-обновлять:

Я добавил код перечисления, ранее опущенный.Я перепробовал все эти типы кодировки;все они приводят к образованию "мусора".Это:Я перепробовал каждый из этих вариантов:

byte[] binData = StringToByteArray(fileContent, EncodingType.ASCII);
byte[] binData = StringToByteArray(fileContent, EncodingType.Unicode);
byte[] binData = StringToByteArray(fileContent, EncodingType.UTF7);
byte[] binData = StringToByteArray(fileContent, EncodingType.UTF8);

Ни один из них не работает должным образом.Поскольку я прочитал предложенную вами функцию, она должна быть в Юникоде.Обратите внимание, что я хочу вернуть массив байтов, а не преобразованную строку.Все еще в замешательстве.

ОТВЕТ:

Я просто исключил перечисление, и функция, которую я написал, называлась StringToByteArray .Вместо этого я закодировал следующее:

byte[] binData = Convert.FromBase64String(fileContent); 
Это было полезно?

Решение

Посмотрите на Convert.FromBase64String() функция

Другие советы

Base64 - это схема кодирования, которая позволяет вам представлять двоичные данные в виде последовательности символов ASCII, чтобы их можно было включать в текстовые файлы и сообщения электронной почты, в которых исходные двоичные данные неприемлемы.Приведенные ниже примеры показывают кодировку и декодирование строк в юникоде.Дайте мне знать, если это то, что вы хотели, если нет, я могу уточнить это для вас.

//Encoding
 public static string StringToBase64 (string src) {

    // Get's byte representation unicode string
    byte[] b = Encoding.Unicode.GetBytes(src);

    // Returns Base64-encoded string
    return Convert.ToBase64String(b);

}
//Decoding
public static string Base64ToString (string src) {

    // Decodes Base64-encoded string to a byte array
    byte[] b = Convert.FromBase64String(src);

    // Returns decoded Unicode string
    return Encoding.Unicode.GetString(b);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top