none
ASP com caracteres UTF-8, response.write não escreve as palavras acentuadas! RRS feed

  • Pergunta

  • Galera,

     

    Estou com um problema chato de se resolver, estou trabalhando em um sistema em ASP 3 com SQL Server, o sistema é multi linguas, no meu ambiente de desenvolvimento quando sou um response.write("Ação") ele printa "Ação" na tela, certinho, porem no cliente ele não printa os caracteres especiais corretamente, o "ç" e o "ã" saem baguncados!

     

    Isso deve sera culpa do servidor do cliente, talvez ele não suporte UTF-8?

    Tentei um binarywrite mas tb não funcionou!

     

    Algum dica?

     

    Abraços

    quinta-feira, 26 de julho de 2007 13:03

Respostas

  • Solução:

    IMPORTANTE:
    O arquivo deve ser salvo em formato "utf-8". Sem isso não funciona.

    No código ASP inserir estas linhas:

    1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
    2 <%  
    3 response.Charset = "utf-8" 
    4 response.ContentType = "text/html" 
    5 on error resume next  
    6  
    7 response.write "ação"  
    8 %> 


    sexta-feira, 6 de março de 2009 14:46
  • Caracas, pense num negócio complicado.
    Eu estou com 3 clientes com este mesmo problema. Já fiz de tudo, coloquei UTF-8, Response.CharSet = "ISO-8859-1", já coloquei as meta tags: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />, <meta http-equiv="Content-Type" content="text/html; charset=
    ISO-8859-1" /> e nada resolve o problema. Caracas, nem no site da Microsoft tem esta resolução. Já to doido sem a resolução deste problema viu.
    Bom qualquer dica diz ai, ou me passa por emial, caito_@hotmail.com, obg.
    Se eu encontrar te mando tb


    Pessoal encontrei uma solução pra isso.
    Coloquei na parte servidor, esta declaração, Response.CharSet = "ISO-8859-1". No cabeçalho do site coloquei a meta tag <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />, e ao cadastrar qualquer coisa dei um replace nas strings desta forma abaixo.

    Function HTMLEspeciais(sString)
     If (sString <> "") Then
      sString = Replace(sString, "á", "&aacute;")
      sString = Replace(sString, "â", "&acirc;")
      sString = Replace(sString, "à", "&agrave;")
      sString = Replace(sString, "ã", "&atilde;")

      sString = Replace(sString, "ç", "&ccedil;")

      sString = Replace(sString, "é", "&eacute;")
      sString = Replace(sString, "ê", "&ecirc;")

      sString = Replace(sString, "í", "&iacute;")

      sString = Replace(sString, "ó", "&oacute;")
      sString = Replace(sString, "ô", "&ocirc;")
      sString = Replace(sString, "õ", "&otilde;")

      sString = Replace(sString, "ú", "&uacute;")
      sString = Replace(sString, "ü", "&uuml;")

      sString = Replace(sString, "Á", "&Aacute;")
      sString = Replace(sString, "Â", "&Acirc;")
      sString = Replace(sString, "À", "&Agrave;")
      sString = Replace(sString, "Ã", "&Atilde;")

      sString = Replace(sString, "Ç", "&Ccedil;")

      sString = Replace(sString, "É", "&Eacute;")
      sString = Replace(sString, "Ê", "&Ecirc;")

      sString = Replace(sString, "Í", "&Iacute;")

      sString = Replace(sString, "Ó", "&Oacute;")
      sString = Replace(sString, "Ô", "&Ocirc;")
      sString = Replace(sString, "Õ", "&Otilde;")

      sString = Replace(sString, "Ú", "&Uacute;")
      sString = Replace(sString, "Ü", "&Uuml;")

      sString = Replace(sString, """", "&quot;") '"
      sString = Replace(sString, "<", "&lt;") '<
      sString = Replace(sString, ">", "&gt;") '>
     End If

     HTMLEspeciais = sString
    End Function

    Pronto, depois disso, tudo funciona as mil maravilhas.


    Caito
    quarta-feira, 9 de dezembro de 2009 19:23
  • Afinal o necessário foi gravar o ficheiro em UTF-8.

    No ultraedit, tem lá no menu File-Conversions->ASCII to UTF-8 (Unicode)

    E depois gravei e voilá. Tudo perfeito. Sem codepages, vbscripts, nada.

    terça-feira, 12 de outubro de 2010 18:52

Todas as Respostas

  • Olá,

    Tenta colocar no inicio do código ASP:
    Response.Charset="ISO-8859-1"
    ou
    Response.Charset="UTF-8"

    ou ainda, na primeira linha das páginas ASP
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>

    Espero que ajude...



    []'s
    Previatti
    http://www.planetinternet.com.br

    sábado, 28 de julho de 2007 15:38
  • Já coloquei! esse comando e não funcionou!

     

    Os caracteres especiais funcionam quando esta no proprio HTML, mas quando dou response.write ele vem todo zuado!

    Acho que o servidor não tem suporte a UTF-8 por isso o response.write(processado pelo servidor) não funciona, e quando está no proprio HTML e é jogado para o navegador do cliente ele funciona, imaginando que o cliente tenha suporte a UTF-8!

     

     

    segunda-feira, 30 de julho de 2007 12:16
  • Caracas, pense num negócio complicado.
    Eu estou com 3 clientes com este mesmo problema. Já fiz de tudo, coloquei UTF-8, Response.CharSet = "ISO-8859-1", já coloquei as meta tags: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />, <meta http-equiv="Content-Type" content="text/html; charset=
    ISO-8859-1" /> e nada resolve o problema. Caracas, nem no site da Microsoft tem esta resolução. Já to doido sem a resolução deste problema viu.
    Bom qualquer dica diz ai, ou me passa por emial, caito_@hotmail.com, obg.
    Se eu encontrar te mando tb
    • Sugerido como Resposta Caito_Recife quarta-feira, 9 de dezembro de 2009 19:14
    terça-feira, 12 de agosto de 2008 00:46
  • já tentaram o <%= Server.HTMLEncode(String) %> ??

     

    quinta-feira, 14 de agosto de 2008 20:51
  • Tenta ver o seguinte, a codificação que vc salva seu arquivo.

    As vezes mesmo colocando essas tags o negocio não funfa, ai o jeito é salvar o arquivo como UTF-8 mesmo.

     

    Tive umas encrencas assim com MySQL.

    sexta-feira, 15 de agosto de 2008 14:19
  • Agora mesmo estava passando pode isso e resolvi somente com a seguinte:

    Code Snippet

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>


    Lembrando que o CODEPAGE tem que ser
    65001, senão, não irá funcionar.

    Espero ter ajudado.
    • Sugerido como Resposta eduhunter quinta-feira, 28 de abril de 2011 16:24
    segunda-feira, 18 de agosto de 2008 00:06
  • Solução:

    IMPORTANTE:
    O arquivo deve ser salvo em formato "utf-8". Sem isso não funciona.

    No código ASP inserir estas linhas:

    1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
    2 <%  
    3 response.Charset = "utf-8" 
    4 response.ContentType = "text/html" 
    5 on error resume next  
    6  
    7 response.write "ação"  
    8 %> 


    sexta-feira, 6 de março de 2009 14:46
  • Caracas, pense num negócio complicado.
    Eu estou com 3 clientes com este mesmo problema. Já fiz de tudo, coloquei UTF-8, Response.CharSet = "ISO-8859-1", já coloquei as meta tags: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />, <meta http-equiv="Content-Type" content="text/html; charset=
    ISO-8859-1" /> e nada resolve o problema. Caracas, nem no site da Microsoft tem esta resolução. Já to doido sem a resolução deste problema viu.
    Bom qualquer dica diz ai, ou me passa por emial, caito_@hotmail.com, obg.
    Se eu encontrar te mando tb


    Pessoal encontrei uma solução pra isso.
    Coloquei na parte servidor, esta declaração, Response.CharSet = "ISO-8859-1". No cabeçalho do site coloquei a meta tag <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />, e ao cadastrar qualquer coisa dei um replace nas strings desta forma abaixo.

    Function HTMLEspeciais(sString)
     If (sString <> "") Then
      sString = Replace(sString, "á", "&aacute;")
      sString = Replace(sString, "â", "&acirc;")
      sString = Replace(sString, "à", "&agrave;")
      sString = Replace(sString, "ã", "&atilde;")

      sString = Replace(sString, "ç", "&ccedil;")

      sString = Replace(sString, "é", "&eacute;")
      sString = Replace(sString, "ê", "&ecirc;")

      sString = Replace(sString, "í", "&iacute;")

      sString = Replace(sString, "ó", "&oacute;")
      sString = Replace(sString, "ô", "&ocirc;")
      sString = Replace(sString, "õ", "&otilde;")

      sString = Replace(sString, "ú", "&uacute;")
      sString = Replace(sString, "ü", "&uuml;")

      sString = Replace(sString, "Á", "&Aacute;")
      sString = Replace(sString, "Â", "&Acirc;")
      sString = Replace(sString, "À", "&Agrave;")
      sString = Replace(sString, "Ã", "&Atilde;")

      sString = Replace(sString, "Ç", "&Ccedil;")

      sString = Replace(sString, "É", "&Eacute;")
      sString = Replace(sString, "Ê", "&Ecirc;")

      sString = Replace(sString, "Í", "&Iacute;")

      sString = Replace(sString, "Ó", "&Oacute;")
      sString = Replace(sString, "Ô", "&Ocirc;")
      sString = Replace(sString, "Õ", "&Otilde;")

      sString = Replace(sString, "Ú", "&Uacute;")
      sString = Replace(sString, "Ü", "&Uuml;")

      sString = Replace(sString, """", "&quot;") '"
      sString = Replace(sString, "<", "&lt;") '<
      sString = Replace(sString, ">", "&gt;") '>
     End If

     HTMLEspeciais = sString
    End Function

    Pronto, depois disso, tudo funciona as mil maravilhas.


    Caito
    quarta-feira, 9 de dezembro de 2009 19:23
  • Bom dia. Tivemos um problema deste tipo na empresa onde trabalho. Nós utilizamos para programar o famoso Notepad++, e descobrimos que a codificação utilizada por um dos desenvolvedores estava em conflito com a codificação dos outros. Nós convertemos todo o código para codificação ANSI e o problema foi resolvido. Espero ter ajudado.
    quinta-feira, 21 de janeiro de 2010 13:40
  • o meu tbm ainda não funciona galera... salvei o arquivo como ANSI e ele inseriu no SQL Server blz... dpois ficou doido huahauha uso funçãop troca é por &eacute; mas neeeeeeeeeemmm fik todo doidão
    PlugMania.com.br
    terça-feira, 30 de março de 2010 19:01
  • Agora mesmo estava passando pode isso e resolvi somente com a seguinte:

    Code Snippet

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>


    Lembrando que o CODEPAGE tem que ser
    65001, senão, não irá funcionar.

    Espero ter ajudado.

    muito obrigado, seu post salvou meu dia.
    segunda-feira, 19 de abril de 2010 21:02
  • Também salvou o meu dia. Melhor. Minha vida!!
    terça-feira, 12 de outubro de 2010 13:46
  • Afinal o necessário foi gravar o ficheiro em UTF-8.

    No ultraedit, tem lá no menu File-Conversions->ASCII to UTF-8 (Unicode)

    E depois gravei e voilá. Tudo perfeito. Sem codepages, vbscripts, nada.

    terça-feira, 12 de outubro de 2010 18:52
  • Valeu Cara era isso mesmo que Faltava!!

    Muito obrigado 

    *-* Salvou meu trabalho inteiro!!

    Valeu!!

    segunda-feira, 6 de dezembro de 2010 11:31
  • Nossa! Valeu!

    Estava com problemas para utilizar o ajax jquery, ele na hora da passagem dos parametros via POST ele perdia os caracteres especias.

    Com esse <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001 "%> no começo da página que recebe o POST resolveu o problema.

    Valeu pela solução.

    quinta-feira, 3 de fevereiro de 2011 11:25
  • Agora mesmo estava passando pode isso e resolvi somente com a seguinte:

    Code Snippet

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>


    Lembrando que o CODEPAGE tem que ser
    65001, senão, não irá funcionar.

    Espero ter ajudado.
    Valeu cara, salvou meu dia!
    quinta-feira, 28 de abril de 2011 16:24
  • Solução para os problemas, resolva de vez até problemas com AJAX...
    Tudo por causa de uma compilação Ocidental Europeu do arquivo.

    Vamos Lá.

    Abra o Dreamweaver ..abra seu arquivo

    Ctrl+ J em propriedadade pagina >> Titulo Codificação (DTD) Xhtml 1.0 transitional ; Codifiação UTF-8 e marque Incluir Assinatura Unicode (BOM).
    Insira no seu cabeçalho do arquivo <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  se seja feliz !

    Resolva 100 % incompatibilidade de JS tb.

    Att,

    Fabrício Guedes

    sexta-feira, 3 de junho de 2011 19:54
  • Resolvi parte do problema dessa forma.

    Gravei uma ssesion

    Session.CodePage=65001

    Coloquei no início da página

    <%Response.Charset="UTF-8"%>

     

    Mas alguns caracteres ainda vem com problemas, bem menos...

    sábado, 7 de janeiro de 2012 18:51
  • Pessoal estou com problemas ao abrir o arquivo que gerei .csv

    criei

     

     

     Private Sub GeraRelatorioExcel(ByVal relatorio As DataTable)
            Dim tmp As String
            Dim i As Int16
            Dim colcount As Int16
    
            For i = 0 To relatorio.Rows.Count - 1
                For colcount = 0 To relatorio.Columns.Count - 1
                    tmp &= relatorio.Rows(i)(colcount) & ";"
                Next colcount
                tmp &= Environment.NewLine
            Next i
    
            'Dim objsave As New System.IO.File()
            Dim strusuario As String = User.Identity.Name.Replace(".", "_")
    
            If IO.File.Exists("C:\Work\" & strusuario & "excel.csv") Then
                IO.File.Delete("C:\Work\" & strusuario & "excel.csv")
            End If
    
            IO.File.AppendAllText("C:\Work\" & strusuario & "excel.csv", tmp)
    
    
            'Obtêm os dados do arquivo pois o tamanho é requerido para efetuar o download
            Dim arquivo = New IO.FileInfo("C:\Work\" & strusuario & "excel.csv")
    
            'envia para o browser
            Response.Clear()
            Response.Buffer = True
            Response.AddHeader("Content-Disposition", "attachment; filename=" & "C:\Work\" & strusuario & "excel.csv")
            Response.AddHeader("Content-Length", arquivo.Length.ToString())
            Response.Charset = "windows-1254"
            Response.ContentType = "application/vnd.ms-excel"
            Response.ContentType = "text/plain"
            Response.ContentType = "text/csv"
            Response.Charset = System.Text.UTF8Encoding.UTF8.WebName
            Response.Write(tmp)
            Response.End()
    
    
            'arquivo.Delete()
    
            'If IO.File.Exists("C:\Work\" & strusuario & "excel.csv") Then
            'IO.File.Delete("C:\Work\" & strusuario & "excel.csv")
            'End If
        End Sub

     


    só que ao gerar o arquivo algumas colunas que possuem acendo vem desta forma

    Diarréia , 01. Clínica, Não

     

    ja tentei converter para ASCIIEncoding e outras sugestões mas o problema permanece

    POr favor please preciso de ajuda.

     

    Obrigada desde já


    • Editado Tânia Fiertz quinta-feira, 12 de janeiro de 2012 16:46
    quinta-feira, 12 de janeiro de 2012 16:45
  • este lance charset resolveu minha vida, valeu, ótimo post

    <%
    Option Explicit  'Obriga declaração explícita de variável, assim: Dim MinhaVarTal
    Response.Expires = -1   'não deixa informações cache
    Server.ScriptTimeout = 900  '900 segundos = 15 minutos, este é o tempo máximo p/ essa página rodar.

    Response.CharSet = "ISO-8859-1"
    %>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>Confirmação de envio da mensagem em Fale Conosco</title>
    </head>

    e pior que com CODEPAGE=1252 funcionava perfeito até tempos atrás, e tenho outra pagina que está ok om CODEPAGE=1252

    QUE BAGULHO MAIS LOUCO RSRSRSR


    http://www.vilmarbro.com.br

    quinta-feira, 20 de dezembro de 2012 01:00
  • Ola Rafael, temos dois pontos aqui.

    Primeiro: encoding do arquivo. Um arquivo possui um encoding que informa qual mapa de caracteres ele ira usar. Quando você usa o NotePad++, você consegue ver qual é o Encoding do arquivo, hoje o mais comum e o UTF-8.

    O segundo ponto é o texto que você grava no banco de dados. Este texto tambem possui um encoding, que é também o mapa de caracteres utilizado para gravar a informação.

    Desta forma, eu sugiro usar sempre UTF-8, tanto no arquivo quanto no conteudo do banco de dados.

    Quando você executa o comando no asp: response.Charset = "utf-8" , você está indicando para o ASP que o conteudo abaixo será UTF-8, ou seja, o servidor irá pegar o mapa de caracteres UTF-8 e irá apresentar os dados usando ele como referência.

    Neste momento, se os dados que estao no banco de dados nao estão em UTF-8, haverá um problema no mapa dos caracteres. Vamos supor que o caracter & no UTF-8 seja o codigo 222 porém no ISO-8859-1 for o codigo 333.

    No banco de dados, você gravou o texto "&" usando ISO-8859-1, porém, seu arquivo .asp e sua página diz que o conteudo é UTF-8, quando a página ler o conteudo do banco ela vai buscar no MAPA UTF-8 qual é o caracter que ela deve exibir para o conteudo 333. Ela vai exibir algo estranho... Note que voce gravou o & em ISO (333) porém em UTF-8 ele seria (222).

    Por conta disso, eu recomendo voce usar o mesmo encoding em tudo (de preferencia utf-8). Primeiro passo, verifique em qual encoding seu arquivo foi criado (notepad++). Depois disso, use o mesmo encoding no comando response.Charset = "XXXX"  dentro do ASP. Assim você sabe que a página e o conteudo estão usando o mesmo MAPA de caracteres. 

    Por ultimo revise se a informação do banco de dados esta gravada no mesmo encoding, caso nao esteja, você teria que converter esta informação, provavelmente este processo de conversão será bem chato.

    Abs


    []'s --- Se a minha resposta lhe foi util, marque "Propor como Proposta" para qualificar o conteudo do fórum e ajudar os outros usuários. Obrigado, Valdek Santos Santana Junior

    segunda-feira, 28 de janeiro de 2013 12:07
  • o tópico também me ajudou, na página que não funcionava eu pus no response a configuração , acho que só mudei em uma ou duas páginas, as outras seguem funcionando 100% ok qto ao charset, fazendo a configuração na diretiva de página apenas, codepage.

    coisas do asp, coisas do iis, coisas do windows, da micro$oft rsrsrs


    http://www.vilmarbro.com.br

    quinta-feira, 21 de fevereiro de 2013 17:19
  • No meu caso, bastou-me colocar Response.Charset = "utf-8" para resolver a situação

    MadiSs, obrigado pela dica

    sexta-feira, 21 de junho de 2013 13:12