Problemas codificação au trema com em um manipulador http Net

votos
5

Eu tenho um pedido JavaScript indo para um manipulador HTTP ASP.Net (2,0), que passa a solicitação para um serviço de java web. Neste sistema caracteres especiais, tais como aqueles com um sotaque não são repassados ​​corretamente.

POR EXEMPLO

  • input humano: Düsseldorf
  • torna-se um pedido asynch JavaScript para http://site/serviceproxy.ashx?q=D%FCsseldorf, válido em ISO-8859-1, bem como em UTF-8, tanto quanto eu posso dizer. (a menos que seja% C3% BC em UTF-8)
  • HttpContext.Current.Request.QueryString.Get(q)retornos D�sseldorfque é onde os problemas começam.
  • mas HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get(q), Encoding.GetEncoding(ISO-8859-1))retorna D%3fsseldorf(um '?')
  • e HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get(q), Encoding.UTF8)retornosD%ef%bfsseldorf

Por isso, o valor não se decodificado nem re-codificado corretamente para ser passada para o serviço de java.

  • aviso HttpContext.Current.Request.Url.Queryé?q=D%FCsseldorf&output=json&from=1&to=10
  • enquanto HttpContext.Current.Request.QueryString.ToString()éq=D%ufffdsseldorf&output=json&from=1&to=10

Por que é isso, e como eu posso dizer a HttpContexthonrar os cabeçalhos de solicitação que incluem:

Content-Type=application/x-www-form-urlencoded;+charset=UTF-8

e decodificar a URL do QueryStringusando o charset UTF-8.

Adendo: Como as notas de resposta, o problema não está tanto na decodificação como a codificação; usando escape()em JavaScript não escapa de acordo com UTF-8, enquanto estiver usando encodeURIComponent()o faz.

Publicado 25/11/2008 em 23:26
fonte usuário
Em outras línguas...                            


2 respostas

votos
6

Eu não sei o que o personagem padrão de codificação usado pelo seu servidor (IIS?) É, ou se ele pode ser alterado, mas posso dizer-lhe algumas coisas que podem ajudar.

0xFC é a codificação ISO 8859-1 para-u. Enquanto o código de ponto de Unicode é U + 00FC, quando codificados com UTF-8, isto requer dois bytes, e torna-se 0xC3 0xBC.

Se um decodificador UTF-8 foram para ver a seqüência de byte ilegal 0xFC, seria decodificá-lo como um Unicode "caráter de substituição", U + FFFD, e pegar onde ele viu o início de uma outra seqüência de byte válido, neste caso 's '.

A razão que você começa %3fé que '?' é o "caráter de substituição" para o conjunto de caracteres latinos, semelhante a no conjunto de caracteres Unicode.

Eu acredito que você está vendo é a codificação do cliente com a norma ISO-8859-1, mas o servidor está a descodificar com UTF-8. Assim que ela atinge o servidor, os dados são corrompidos. Eu recomendo que você modificar o cliente para usar codificação UTF-8; deve-se solicitarhttp://site/serviceproxy.ashx?q=D%C3%BCsseldorf

Parece que você está construindo esses URLs de JavaScript, por isso você deve usar os encodeURIe encodeURIComponentfunções, não escape.

Respondeu 26/11/2008 em 02:00
fonte usuário

votos
1

Estou recebendo o mesmo problema com um manipulador genérico ASP.NET quando o URL é digitado diretamente no IE8. Caracteres estão sendo enviados através de 65533 como char, e ainda assim eu tenho IE8 definido para

[X] Enviar URLs UTF-8.

Na minha situação, eu estou depuração um manipulador HTTP no Visual Studio e digitando o endereço do manipulador diretamente no navegador:

 http:? //localhost/myHandler.ashx prazo = xxxxxx

e depois percorrendo o código. O cliente estará passando URLs UTF-8 codificado, mas há uma maneira para depurar o código quando IE8 rodando na máquina de desenvolvimento é o cliente?

Respondeu 21/01/2010 em 20:59
fonte usuário

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