jQuery $ .get () charset de resposta quando nenhum cabeçalho é definido?

votos
6

Eu só recentemente instalado Winamp Canção Solicitante wich é uma canção web plugin do solicitante Winamp com um construído em mínima CGI HTTP Server.

O que o plugin faz é que ele funciona um servidor web, serve uma página html com algumas variáveis ​​especiais wich que substitui com dados reais a pedido (lista de reprodução, solicitação de fila, o tempo que ficaram na canção etc).

Eu vi isso como um projeto divertido e bom para aprender algumas jQuery então comecei a ligar o meu próprio código js para substituir, corrigir e ajaxify o site servido a partir do plug-in, mas eu agora correr em um problema com codificação de caracteres.

Na página você obter links para todas as músicas na lista de reprodução. Quando você clica em um dos links me juntei a minha própria função de clique jQuery. Assim em vez de recarregar a página inteira quando você pedir uma música que eu faço um $ .get ($ (this) .attr ( 'href', function (response) {... code ...}) e, em seguida, eu uso replaceWith para substituir a fila atual com a nova fila gerada com o seu pedido adicionado na mosca. Eu faço a mesma coisa para mostrar / atualização actualmente a jogar e em busca de modo que tudo começa buscada em segundo plano e, em seguida, substituído na mosca com algumas animações acrescentou.

Todos jQuery / Ajax funciona muito bem, mas o grande problema que tenho é com charset e com nomes de músicas em fila / lista de reprodução. não caracteres especiais (åäöé etc.) em nomes de não funciona em todos.

O plug-in transmite tudo em iso-8859-1 / latin1 e minha meta tag na marcação informa ao navegador que esta página é latin1. Em uma atualização de página normal no navegador isso funciona bem e os caracteres especiais são exibidos como normal. Mas quando eu uso jQuery e $ .get () para substituir blocos de código em tempo real os caracteres especiais só aparecem como?.

Eu acho que o problema está em que a inadimplência jQuery para acreditar que a resposta $ .get () é UTF-8 se nenhum cabeçalho diz o contrário. O plugin não define qualquer cabeçalho para codificação / charset em tudo e desde que eu tenho nenhum controle do backend eo que cabeçalhos prepare-se Eu não posso mudar isso.

As únicas cabeçalhos eu entrar no resposta do plugin é:

WinampServer: servidor
Connection: close
Content-Type: text / html

Espero que você entenda o meu problema. Eu tenho uma página onde eu não tenho controle em todo o back-end e tudo que eu tenho que trabalhar com é gerado HTML. Eu não posso mudar ou adicionar cabeçalhos nas respostas. Eu preciso dizer jQuery que a resposta é, na verdade, em latin1 e não UTF-8 para que a codificação de caracteres especiais não quebrar. Eu tentei o scriptCharset: 'iso-8859-1' em jQuerys ajaxSetup mas que só funciona com script type / json e eu estou trabalhando com respostas HTML.

Qualquer idéia se isso é possível ou qualquer outra solução alternativa que você poderia pensar?

Publicado 01/12/2008 em 10:11
fonte usuário
Em outras línguas...                            


3 respostas

votos
28

Editar : ok eu acho que isso funciona (pelo menos funcionou no meu ambiente de teste, ver revisões para tentativa anterior)

$.ajaxSetup({
    'beforeSend' : function(xhr) {
        xhr.overrideMimeType('text/html; charset=UTF-8');
    },
});
$('#stuff').load('/yourresource.file'); // your ajax load

o que eu tinha era o principal arquivo definido no UTF-8eo arquivo de dados definido em ISO-8859-1. sem o código acima, eu tenho um monte de lixo para a cadeia teste åäöé , como esperado. com o código acima, carregou åäöé adequadamente codificada.

Respondeu 01/12/2008 em 10:51
fonte usuário

votos
0

Este é apenas para salientar que, embora o método overrideMimeType () está disponível em navegadores baseados no Gecko (Firefox, ...), não é no IE (pelo menos <= 7), e não parece haver nenhuma solução. (Eu não sei sobre a disponibilidade em outros navegadores.)

Respondeu 11/12/2008 em 16:35
fonte usuário

votos
0

No início, seria melhor se você usou a função de $ .ajax mais geral ().

De acordo com a documentação , há a opção scriptCharset, no entanto, só é aplicável em certos tipos de dados. Também é afirmado que isso é necessário apenas se a codificação da página de chamada é diferente.

Respondeu 01/12/2008 em 12:16
fonte usuário

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