Se essa é uma pergunta e resposta para "compartilhar o conhecimento", acho que estamos procurando algo um pouco mais profundo. Também aparece uma pesquisa rápida de SO: stackoverflow.com/a/7368168/419
Kev
1
@Gnark Qualquer string é codificada por um determinado esquema de codificação de bits subjacente. Seja ASCII, UTF7, UTF8, .... A questão colocada é, na melhor das hipóteses, incompleta.
Lorenz Lo Sauer
2
Pergunte a si mesmo: você realmente precisa fazer isso? Lembre-se de que o base64 se destina principalmente a representar dados binários em ASCII, a armazenar em um campo char em um banco de dados ou a enviar por e-mail (onde novas linhas podem ser injetadas). Deseja realmente obter dados de caracteres, convertê-los em bytes e convertê-los novamente em dados de caracteres, desta vez ilegíveis e sem nenhuma dica do que era a codificação original?
precisa saber é o seguinte
Por que devemos nos preocupar com a codificação original? Codificamos a string nos bytes usando a representação UTF8, que pode representar todos os caracteres possíveis da string. Em seguida, serializamos esses dados e, por outro lado, desserializamos esses dados e reconstruímos a mesma string que tínhamos originalmente (o objeto string não mantém as informações sobre codificação usadas de qualquer maneira). Então, por que existe alguma preocupação relacionada à codificação usada? Podemos considerá-lo como uma maneira proprietária de representar os dados serializados, pelos quais não devemos nos interessar.
Verificações nulos para cadeias de entrada em ambas as funções e a solução é perfeito :)
Sverrir Sigmundarson
22
@SverrirSigmundarson: Isso ou torná-los métodos de extensão.
TJ Crowder
73
@SverrirSigmundarson - Por que uma verificação nula? Ele não é quem desreferencia a string de entrada. As verificações nulas devem impedir o NullReferenceExceptionseu próprio código, não o de outra pessoa.
ken
16
@ken E outra pessoa dirá "você só deve expor erros no seu próprio código, não no de outra pessoa", invocando o princípio da menor surpresa, temperado com "falha antecipada" e "encapsulamento adequado". Às vezes, isso significa ocultar erros de componentes de nível inferior, às vezes algo completamente diferente. Nesse caso, eu concordarei que a quebra de um deref é definitivamente duvidosa (além disso, todos concordamos lentamente com o fato de que o conceito nulo é um pouco complicado, para começar), mas ainda podemos ver alguns efeitos caso contrário: o nome do parâmetro fornecido na exceção pode não estar correto se não estiver marcado.
tne
6
retornar System.Text.Encoding.UTF8.GetString (base64EncodedBytes, 0, base64EncodedBytes.Length); para windows phone 8
steveen zoleko
46
Estou compartilhando minha implementação com alguns recursos interessantes:
usa a extensão Methods for Encoding class. A justificativa é que alguém pode precisar oferecer suporte a diferentes tipos de codificações (não apenas UTF8).
Outra melhoria está falhando normalmente com resultado nulo para entrada nula - é muito útil em cenários da vida real e suporta equivalência para decodificação X = (codificar (X)).
Observação: lembre-se de que para usar o método de extensão, é necessário (!) Importar o espaço para nome com a usingpalavra - chave (neste caso using MyApplication.Helpers.Encoding).
Retornar nullno caso de nullé um comportamento muito inconsistente. Nenhuma outra API .net que funciona com strings faz isso.
T3chb0t
4
@ t3chb0t fique à vontade para ajustá-lo às suas necessidades. Como a forma como é apresentada aqui foi ajustada à nossa. Esta não é uma API pública;)
andrew.fox
1
Agora você não precisa enviar 2 variáveis para a outra parte em sua comunicação (para quem você está enviando dados codificados em base64)? Você precisa enviar a codificação usada e os dados base64 reais? Não é mais fácil se você usar uma convenção de ambos os lados para usar a mesma codificação? Dessa forma, você só teria que enviar dados base64, certo?
Mladen B.
38
Com base nas respostas de Andrew Fox e Cebe, eu mudei e fiz extensões de string em vez de extensões Base64String.
Eu gostaria de acrescentar um ParseBase64 (este texto corda, codificação de codificação, a decodedText string) (para preencher a exceção se necessário, e chamada que na TryParseBase64
João Antunes
22
Uma pequena variação na resposta andrew.fox, pois a sequência a ser decodificada pode não ser a sequência codificada em base64 correta:
As ferramentas online não ajudam nessa situação - ele está perguntando como codificá-lo. Muitas vezes me pergunto por que as pessoas dizem "Confira esta ferramenta on-line!", Porque o OP não pediu uma ferramenta on-line: D
publicstaticclassBase64Url{publicstaticstringEncode(string text){returnConvert.ToBase64String(Encoding.UTF8.GetBytes(text)).TrimEnd('=').Replace('+','-').Replace('/','_');}publicstaticstringDecode(string text){
text = text.Replace('_','/').Replace('-','+');switch(text.Length%4){case2:
text +="==";break;case3:
text +="=";break;}returnEncoding.UTF8.GetString(Convert.FromBase64String(text));}}
A pergunta não era sobre codificação de URL, mas ainda é útil ..
Momoro 21/03
Opa, postei na pergunta errada
juliushuck 24/03
Não tem problema, ainda é interessante ver como codificar / decodificar um URL :)
Momoro
3
Você pode exibi-lo assim:
var strOriginal = richTextBox1.Text;byte[] byt =System.Text.Encoding.ASCII.GetBytes(strOriginal);// convert the byte array to a Base64 stringstring strModified =Convert.ToBase64String(byt);
richTextBox1.Text=""+ strModified;
Agora, convertendo de volta.
var base64EncodedBytes =System.Convert.FromBase64String(richTextBox1.Text);
richTextBox1.Text=""+System.Text.Encoding.ASCII.GetString(base64EncodedBytes);MessageBox.Show("Done Converting! (ASCII from base64)");
Respostas:
Codificar
Decodificar
fonte
NullReferenceException
seu próprio código, não o de outra pessoa.Estou compartilhando minha implementação com alguns recursos interessantes:
Observação: lembre-se de que para usar o método de extensão, é necessário (!) Importar o espaço para nome com a
using
palavra - chave (neste casousing MyApplication.Helpers.Encoding
).Código:
Exemplo de uso:
fonte
null
no caso denull
é um comportamento muito inconsistente. Nenhuma outra API .net que funciona com strings faz isso.Com base nas respostas de Andrew Fox e Cebe, eu mudei e fiz extensões de string em vez de extensões Base64String.
fonte
Uma pequena variação na resposta andrew.fox, pois a sequência a ser decodificada pode não ser a sequência codificada em base64 correta:
fonte
Você pode usar a rotina abaixo para converter string em formato base64
Além disso, você pode usar a ferramenta online muito boa OnlineUtility.in para codificar string no formato base64
fonte
Uso
fonte
Codificação / Decodificação Base64 segura de URL
fonte
Você pode exibi-lo assim:
Agora, convertendo de volta.
Eu espero que isso ajude!
fonte
Para aqueles que simplesmente desejam codificar / decodificar dígitos base64 individuais:
Existem várias versões do Base64 que discordam sobre o que usar nos dígitos 62 e 63, portanto
DecodeBase64Digit
podem tolerar vários deles.fonte