Posso usar Unicode para decodificar uma solicitação HTTP?

votos
2

Eu entendo que a codificação padrão de uma solicitação HTTP é ISO 8859-1.

Sou capaz de utilizar Unicode para decodificar uma solicitação HTTP dado como uma matriz de bytes?

Se não, como eu decodificar esse pedido em C #?

EDIT: Estou desenvolvendo um servidor, não um cliente.

Publicado 09/05/2009 em 11:52
fonte usuário
Em outras línguas...                            


4 respostas

votos
0


O código dado abaixo deve ajudar, se você está esperando grande quantidade de dados de streaming para baixo, em seguida, fazê-lo de forma assíncrona é a melhor maneira de ir sobre.

string myUrl = @"http://somedomain.com/file";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(myUrl);

//Set some reasonable limits on resources used by this request
request.MaximumAutomaticRedirections = 4;
request.MaximumResponseHeadersLength = 4;
request.Timeout = 15000;

response = (HttpWebResponse)request.GetResponse();                              

Stream receiveStream = response.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");

StreamReader readStream = new StreamReader(receiveStream, encode);

Char[] read = new Char[512];

// Reads 512 characters at a time.
int count = readStream.Read(read, 0, 512);

while (count > 0)
{
  // Dumps the 512 characters on a string and displays the string.
  String str = new String(read, 0, count);
  count = readStream.Read(read, 0, 512);
}
Respondeu 09/05/2009 em 11:58
fonte usuário

votos
3

Como você disse a codificação padrão de uma solicitação HTTP POST é ISO-8859-1. Caso contrário, você tem que olhar para o cabeçalho Content-Type que podem então ficar parecido Content-Type: application/x-www-form-urlencoded; charset=UTF-8.

Depois de ler os dados postados em um array de bytes você pode decidir converter este tampão para uma string (lembre-se todas as cordas em .NET são UTF-16). É somente nesse momento que você precisa saber a codificação.

byte[] buffer = ReadFromRequestStream(...)
string data = Encoding
              .GetEncoding("DETECTED ENCODING OR ISO-8859-1")
              .GetString(buffer);

E para responder a sua pergunta:

Sou capaz de utilizar Unicode para decodificar uma solicitação HTTP dado como uma matriz de bytes?

Sim, se unicode foi usado para codificar esta matriz de bytes:

string data = Encoding.UTF8.GetString(buffer);
Respondeu 09/05/2009 em 12:38
fonte usuário

votos
1

Você não usa uma codificação unicode para decodificar algo que não é codificado usando uma codificação unicode, como que não seria decodificar corretamente todos os caracteres.

Criar um Encodingobjeto para a codificação correta e usar isso:

Encoding iso = Encoding.GetEncoding("iso-8859-1");
string request = iso.GetString(requestArray);
Respondeu 09/05/2009 em 12:57
fonte usuário

votos
0

Cada vez que .NET transfere informação entre uma representação externa (por exemplo, uma tomada de TCP) e o interno Unicodeformato (ou o inverso), alguma forma de codificação é envolvido.

Veja utf-8-vs-unicode , especialmente de Jon Skeet resposta, com a referência ao artigo de Joel A Absolute Minimum cada Software Developer absolutamente, Positivamente Precisa Saber Sobre Unicode e Conjuntos de caracteres (Sem Desculpas!) .

Respondeu 09/05/2009 em 13:22
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more