Pergunta

Estou portando uma aplicação isapi (pageproducers) do delphi 7 para o delphi 2009, as páginas são baseadas em arquivos html em UTF8.

Tudo corre bem, exceto quando Onhtmltag é acionado e eu substituo uma tag transparente por qualquer valor por caracteres especiais como caracteres acentuados (áé...). Esses caracteres são substituídos na saída por um caractere �.

O que está errado?

Foi útil?

Solução

Como parte do procedimento de depuração, você deve descobrir exatamente quais valores de byte o navegador recebe para o caractere de ponto de interrogação.

Como você deve saber, o tipo de string do Delphi 2009 é Unicode, enquanto todas as versões anteriores eram ANSI.Delphi 7 introduziu o Utf8String tipo, mas o Delphi 2009 tornou esse tipo especial.Se você não estiver usando esse tipo para armazenar strings codificadas como UTF-8, comece a fazer isso.Valores mantidos em Utf8String variáveis ​​serão convertidas para UnicodeString valores automaticamente quando você atribui um ao outro.

Se você estiver armazenando suas strings codificadas em UTF-8 em AnsiString variáveis, então elas serão convertidas para Unicode usando a página de código padrão do sistema se você as atribuir a um UnicodeString.Não é isso que você quer.

Se você estiver atribuindo literais codificados em UTF-8 a variáveis ​​do tipo string, Pare com isso.Esse tipo espera que seus valores sejam codificados como UTF-16, assim como WideString sempre fez.

Se você estiver carregando seus arquivos em um TStrings descendente com LoadFromFile, então você precisa começar a usar o segundo parâmetro desse método, que informa qual codificação usar.Arquivos codificados em UTF-8 devem usar TEncoding.UTF8.O padrão é TEncoding.Unicode, que é UTF-16 little-endian.

Outras dicas

Este é provavelmente um problema de codificação de personagens.

O Delphi IDE geralmente usa o Windows-1252 ou UTF-16 para codificar o código-fonte. O HTML geralmente usa UTF-8.

Você provavelmente precisa de alguma transliteração entre essas codificações. Para isso, você precisa descobrir quais codificações são usadas exatamente (como Roubar menções).

Ou reverter para html escapando de caracteres acentuados (como Ralph menções)

Você pode postar um pequeno aplicativo que mostra o problema? (Você pode me enviar um e -mail, sobre qualquer coisa que tenha Jeroen no nome de usuário e Pluimers.com no nome de domínio chegará na minha caixa de correio).

--Jeroen

Obrigado pela sua ajuda, depois de algum teste, o problema foi muito simples (ou estúpido também)

response.contenttype := 'text/html charset=UTF-8'

Não há necessidade de traduzir manualmente entre o UTF8String Ansistring unicodestring. O uso de cordas Delphi 2009 está próximo do perfeito.

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