Как я могу преобразовать строку в байтовой кодировке в предыдущее значение строки? - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть файл, внутри которого есть dGVzdA == , dGVzdA == - это слово test , преобразующее в байт [].

После этого я хочу, чтобы в этом слове снова была моя строка test Итак, я делаю это:

[HttpPost("[Action]")]
public async Task<IActionResult> ExtractLicenseData(IFormFile file){
    string fileContents ;

    using (var stream = file.OpenReadStream())
    {
        using (var reader = new StreamReader(stream))
        {
            fileContents = await reader.ReadToEndAsync();
        }
    }
    string test = Encoding.ASCII.GetString(fileContents); // error
    return BadRequest(test);
}

Но когда я пытаюсь сделать string test = Encoding.ASCII.GetString(fileContents); у меня появляется ошибка:

не может преобразовать из 'строки' в 'байт []'

Для резюме:

У меня есть строка dGVzdA == Я хочу, наконец, преобразовать ее в исходную строку test .

/! \ Чтобы перейти от теста к dGVzdA == Я делаю это Encoding.ASCII.GetBytes("test").

Ответы [ 2 ]

6 голосов
/ 26 апреля 2019

dGVzdA == - это тестовое преобразование слова в байтах [].

Нет, dGVzdA== - это представление в формате base64 байтов 0x74, 0x65, 0x73, 0x74... что, в свою очередь, является ASCII-кодированным представлением текста «test».

Так что, если вам нужен байтовый массив с содержимым 0x74, 0x65, 0x73, 0x74, вам нужно просто выполнить декодирование base64:

byte[] bytes = Convert.FromBase64String(fileContents);

Если затем вы захотите вернуться к строке, применив кодировку ASCII, вы должны использовать:

string text = Encoding.GetString(bytes);

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

Чтобы перейти от test к dGVzdA==, я делаю это Encoding.ASCII.GetBytes("test").

Нет, вы этого не делаете.Encoding.ASCII.GetByte("test") возвращает вам байтовый массив с байтами 0x74, 0x65, 0x73, 0x74, тогда как dGVzdA== является результатом преобразования этого байтового массива в строку с помощью кодировки base64.

1 голос
/ 26 апреля 2019

Поскольку это уже string, reader.ReadToEndAsync() будет считывать весь файл до конца и возвращать его в string.

Вам не нужно делать Encoding.ASCII.GetString(fileContents);, проверьте fileContents после:

using (var reader = new StreamReader(stream))
{
    fileContents = await reader.ReadToEndAsync();
    // here
}

теперь сделайте Convert.FromBase64String(fileContents); там у вас будет байт, чем вы получите свою строку из байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...