Pergunta

simples sim ou nenhuma pergunta, e eu tenho 90% de certeza que ele não é ... mas eu não tenho certeza.

Pode uma string Base64 contém guias?

Foi útil?

Solução

Depende do que você está pedindo. Se você está perguntando se deve ou não as abas pode ser base-64 codificado, então a resposta é "sim", uma vez que podem ser tratados da mesma forma que qualquer outro personagem ASCII.

No entanto, se você está perguntando se deve ou não base 64 de saída pode conter tabulações, então a resposta é não. O link a seguir é para um artigo detalhando base-64, incluindo os caracteres que são considerados válidos:

http://en.wikipedia.org/wiki/Base64

Outras dicas

A resposta curta não é - mas Base64 não pode conter retornos de carro quer.

Por isso, se você tem várias linhas de Base64, você tira qualquer retornos de carro, alimentações de linha, e qualquer outra coisa que não está na Base64 alfabeto

Isso inclui guias.

A partir wikipedia.com:

A versão atual do PEM (especificado em RFC 1421) usa um de 64 caracteres alfabeto consistindo em letras maiúsculas e minúsculas caracteres do alfabeto romano (A-Z, a-z), os algarismos (0-9), e O "+" e "/" símbolos. Os "=" símbolo também é usado como um especial código de sufixo. O original especificação, RFC 989, adicionalmente Utilizou-se o símbolo "*" para delimitar codificado mas os dados não cifrados dentro da saída stream.

Como você pode ver, caracteres de tabulação não estão incluídos. No entanto, você pode, naturalmente, codificar um caractere de tabulação em uma string base64.

Claro. Tab é apenas caracteres ASCII 9, e que tem uma representação base64 como qualquer outro inteiro.

Haha, como você pode ver a partir das respostas, este não é realmente um tal simples sim nenhuma resposta.

A resultante seqüência de Base64 após a conversão não pode conter um caractere de tabulação, mas parece-me que você não está pedindo isso, parece-me que você está pedindo que você pode representar uma string (antes da conversão) contendo uma guia na Base64, e a resposta é sim.

Gostaria de acrescentar ainda que realmente o que você deve fazer é se certificar de que você tome o cuidado de preservar a codificação da seqüência, ou seja, convertê-lo em uma matriz de bytes com a sua codificação correta (Unicode, UTF-8 seja qual for), em seguida, convertido essa matriz de bytes a base 64.

EDIT:. Um teste simples

private void button2_Click(object sender, EventArgs e)
{
  StringBuilder sb = new StringBuilder();
  string test = "The rain in spain falls \t mainly on the plain";
  sb.AppendLine(test);
  UTF8Encoding enc = new UTF8Encoding();
  byte[] b = enc.GetBytes(test);
  string cvtd = Convert.ToBase64String(b);
  sb.AppendLine(cvtd);
  byte[] c = Convert.FromBase64String(cvtd);
  string backAgain = enc.GetString(c);
  sb.AppendLine(backAgain);
  MessageBox.Show(sb.ToString());
}

Base64 especificação ( RFC 4648 ) estados em Seção 3.3 que quaisquer caracteres não-alfabeto encontrados deve ser rejeitada a menos que explicitamente permitido por outra especificação:

Implementações devem rejeitar a dados codificados se contiver
caracteres fora do alfabeto de base na interpretação de base codificado
de dados, a menos que a especificação referindo-se a este documento explicitamente afirma o contrário. tais especificações em vez disso pode afirmar, como MIME faz, que caracteres fora da base codificação do alfabeto deve ser simplesmente ignorados na interpretação dos dados ( "ser liberal no que você aceitar "). Note que isto significa que qualquer retorno do carro adjacente / alimentação de linha (CRLF) caracteres constituem "Caracteres não-alfabeto" e são ignorados.

Specs como PEM ( RFC 1421 ) e MIME ( RFC 2045 ) especifica que as cordas Base64 pode ser dividido por espaços em branco. Por referenciada RFC 822 , uma guia (HTAB) é considerado um espaço em branco.

Assim, quando é usado na base 64 no contexto de MIME ou PEM (e provavelmente outras especificações semelhantes), um espaço em branco, incluindo separadores, deverão ser manuseados (descascado para fora), enquanto a descodificação do conteúdo codificado.

Convert.FromBase64String() no framework .NET não parece se importar com eles. Eu acredito que todos os espaços na string é ignorado.

string xxx = "ABCD\tDEFG";   //simulated Base64 encoded string w/added tab
Console.WriteLine(xxx);
byte[] xx = Convert.FromBase64String(xxx); // convert string back to binary
Console.WriteLine(BitConverter.ToString(xx));

saída:

ABCD    DEFG
00-10-83-0C-41-46

O ponto relevante da RFC 2045 (6: 8)

O fluxo de saída codificada deve ser representado em linhas de não mais de 76 caracteres cada. linha All quebras ou outros não caracteres encontrados na Tabela 1 deve ser ignorado por decodificação de software. Nos dados base64, outros do que aqueles na Tabela caracteres 1, quebras de linha, e outro branco espaço provavelmente indicam uma transmissão erro, sobre a qual um aviso mensagem ou mesmo uma mensagem de rejeição pode ser apropriado em alguns circunstâncias.

SIM!

Base64 é usado para codificar qualquer 8bit valor (decimal de 0 a 255) em uma string usando um conjunto de caracteres seguras. TAB é decimal 9.

base 64 utiliza um dos conjuntos de caracteres seguinte:

Data: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URLs: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_

binários Anexos. (por exemplo: e-mail) no texto também são codificados usando este sistema

Parece que há muita confusão aqui; e surpreendentemente a maioria das respostas são de variedade "Não". Eu não acho que é uma boa resposta canônica. A razão para a confusão é provavelmente o fato de que Base64 não é estritamente especificado; múltiplas implementações práticas e interpretações existe. Você pode conferir link de texto para mais discussão sobre este assunto.

Em geral, porém, conformando codecs base64 deve entender linefeeds, como eles estão mandatados por algumas definições base64 (segmentos 76 caracteres, em seguida, avanço de linha etc). Devido a isso, a maioria dos decodificadores também permitem espaços em branco recuo, e muito comumente qualquer espaço em branco entre os 4 caracteres "trigêmeos" (assim chamado desde que codificam 3 bytes).

Portanto, há uma boa chance de que, na prática, você pode usar guias e outros espaços em branco.

Mas eu não adicionar guias mim mesmo se a geração de conteúdo base64 enviado a um serviço -. Ser conservador no que você enviar, (mais) liberal no que você receber

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top