Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

prompt

[Resolvido] Converter string no formato UTF-8 para ISO-8859-1 ant

Recommended Posts

Fala galera, beleza?

 

Seguinte, estou pastando pra gravar textos com acentos, cedilhas, etc, usando o JQuery.Ajax.

O problema é que, de acordo com a documentação, o JQuery.Ajax sempre irá mandar o texto em formato UTF-8, independente do Charset configurado na página.

 

O que preciso é saber como converter uma String UTF-8 para ISO-8859-1 no asp, antes de gravar no banco de dados..

O PHP tem uma função para fazer isso, mas até agora em ASP não consegui de jeito nenhum resolver..

 

Alguém já passou por esse problema e sabe como resolver?

 

 

Agradeço desde já pelo Help pessoal.

Abs,

Prompt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai pessoal, consegui descobrir uma forma de resolver isso.

na verdade, pelo que pude ver, não existem funções no ASP para fazer tal conversão, porém encontrei num site a solução para o problema.

São funções num arquivo .asp que fazem essas conversões na raça!

 

As funções se encontram abaixo. Salve-as num arquivo separado com o nome utf8.asp:

<%
option explicit 

' Simple functions to convert the first 256 characters 
' of the Windows character set from and to UTF-8.

' Written by Hans Kalle for Fisz
' http://www.fisz.nl

'IsValidUTF8
'  Tells if the string is valid UTF-8 encoded
'Returns:
'  true (valid UTF-8)
'  false (invalid UTF-8 or not UTF-8 encoded string)
function IsValidUTF8(s)
 dim i
 dim c
 dim n

 IsValidUTF8 = false
 i = 1
 do while i <= len(s)
   c = asc(mid(s,i,1))
   if c and &H80 then
     n = 1
     do while i + n < len(s)
       if (asc(mid(s,i+n,1)) and &HC0) <> &H80 then
         exit do
       end if
       n = n + 1
     loop
     select case n
     case 1
       exit function
     case 2
       if (c and &HE0) <> &HC0 then
         exit function
       end if
     case 3
       if (c and &HF0) <> &HE0 then
         exit function
       end if
     case 4
       if (c and &HF8) <> &HF0 then
         exit function
       end if
     case else
       exit function
     end select
     i = i + n
   else
     i = i + 1
   end if
 loop
 IsValidUTF8 = true 
end function

'DecodeUTF8
'  Decodes a UTF-8 string to the Windows character set
'  Non-convertable characters are replace by an upside
'  down question mark.
'Returns:
'  A Windows string
function DecodeUTF8(s)
 dim i
 dim c
 dim n

 i = 1
 do while i <= len(s)
   c = asc(mid(s,i,1))
   if c and &H80 then
     n = 1
     do while i + n < len(s)
       if (asc(mid(s,i+n,1)) and &HC0) <> &H80 then
         exit do
       end if
       n = n + 1
     loop
     if n = 2 and ((c and &HE0) = &HC0) then
       c = asc(mid(s,i+1,1)) + &H40 * (c and &H01)
     else
       c = 191 
     end if
     s = left(s,i-1) + chr(c) + mid(s,i+n)
   end if
   i = i + 1
 loop
 DecodeUTF8 = s 
end function

'EncodeUTF8
'  Encodes a Windows string in UTF-8
'Returns:
'  A UTF-8 encoded string
function EncodeUTF8(s)
 dim i
 dim c

 i = 1
 do while i <= len(s)
   c = asc(mid(s,i,1))
   if c >= &H80 then
     s = left(s,i-1) + chr(&HC2 + ((c and &H40) / &H40)) + chr(c and &HBF) + mid(s,i+1)
     i = i + 1
   end if
   i = i + 1
 loop
 EncodeUTF8 = s 
end function
%>

 

 

O código abaixo é uma página teste pronta. Salve-a como utf8test.asp e vai visualizar o resultado das funções na página:

<!--#include file="utf8.asp"-->
<html>
<head>
<title>Test UTF encoding en decoding</title>
<head/>
<body>
<h1>Decoding</h1>
<p>Kopiëren ok: <%=DecodeUTF8("KopiÅ«ren")%></p>
<p>Kopiëren error: <%=DecodeUTF8("Kopiëren")%></p>
<p>Kopiëren error: <%=DecodeUTF8("KopiÅren")%></p>
<p>Kopiëren error: <%=DecodeUTF8("KopiÅ««ren")%></p>
<p>Kopiëren error: <%=DecodeUTF8("Kopià«ren")%></p>
<h1>Encoding</h1>
<p>Kopiëren UTF-8: <%=EncodeUTF8("Kopiëren")%></p>
<p>Kopiëren forth & back: <%=DecodeUTF8(EncodeUTF8("Kopiëren"))%></p>
<h1>Testing encoding</h1>
<p>Kopiëren: <%=IsValidUTF8("Kopiëren")%></p> 
<p>Kopiūren: <%=IsValidUTF8("Kopiūren")%></p> 
<p>KopiÅ««ren: <%=IsValidUTF8("KopiÅ««ren")%></p> 
<p>Aeroplane: <%=IsValidUTF8("Aeroplane")%></p> 
</body>
</html>

 

Link da fonte: http://www.codetoad.com/asp_utf8.asp#read_comments

 

Abraços a todos.

 

"Espero ajudar muitos como tantos já me ajudaram"

Abs,

Prompt

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma boa função, depois eu coloco ela no lab. de script.....

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei uma solução mais simples:
Eu estava tentando usar um retorno em páginas "charset=iso-8859-1" mas estava dando problemas de caracteres de acentos, e como uso AJAX já tenho uma outra formatação que estava dando conflito quando eu tentava consertar usando outros métodos, então o comando abaixo foi o único que resolveu.

'DecodeUTF8
'  Decodes a UTF-8 string to the Windows character set
'  Non-convertable characters are replace by an upside
'  down question mark.
'Returns:
'  A Windows string
function DecodeUTF8(s)
  dim i
  dim c
  dim n

  i = 1
  do while i <= len(s)
    c = asc(mid(s,i,1))
    if c and &H80 then
      n = 1
      do while i + n < len(s)
        if (asc(mid(s,i+n,1)) and &HC0) <> &H80 then
          exit do
        end if
        n = n + 1
      loop
      if n = 2 and ((c and &HE0) = &HC0) then
        c = asc(mid(s,i+1,1)) + &H40 * (c and &H01)
      else
        c = 191 
      end if
      s = left(s,i-1) + chr(c) + mid(s,i+n)
    end if
    i = i + 1
  loop
  DecodeUTF8 = s 
end function

response.write DecodeUTF8(var_resultado)

Abraços!

Fábio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode também...

colocar Response.CharSet = "ISO-8859-1". No cabeçalho do site 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, "á", "á")
sString = Replace(sString, "â", "â")
sString = Replace(sString, "à", "à")
sString = Replace(sString, "ã", "ã")

sString = Replace(sString, "ç", "ç")

sString = Replace(sString, "é", "é")
sString = Replace(sString, "ê", "ê")

sString = Replace(sString, "í", "í")

sString = Replace(sString, "ó", "ó")
sString = Replace(sString, "ô", "ô")
sString = Replace(sString, "õ", "õ")

sString = Replace(sString, "ú", "ú")
sString = Replace(sString, "ü", "ü")

sString = Replace(sString, "Á", "Á")
sString = Replace(sString, "Â", "Â")
sString = Replace(sString, "À", "À")
sString = Replace(sString, "Ã", "Ã")

sString = Replace(sString, "Ç", "Ç")

sString = Replace(sString, "É", "É")
sString = Replace(sString, "Ê", "Ê")

sString = Replace(sString, "Í", "Í")

sString = Replace(sString, "Ó", "Ó")
sString = Replace(sString, "Ô", "Ô")
sString = Replace(sString, "Õ", "Õ")

sString = Replace(sString, "Ú", "Ú")
sString = Replace(sString, "Ü", "Ü")

sString = Replace(sString, """", """) '"
sString = Replace(sString, "<", "<") '<
sString = Replace(sString, ">", ">") '>
End If

HTMLEspeciais = sString
End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Amigo Xanburzum.
Eu tentei fazer isso, mas não deu muito certo, pois nem sempre o retorno vem no formato do replace.

 

O código que eu usei funcinou 100% e pode ser usado na mesma página da programação,uma vez que não tem o ( option explicit ).

Antes deu achar esse exemplo que eu citei, eu tentei várias formassem sucesso! Algumas funcionavam mas estragavam os acentos do meu retorno do AJAX ou meus acentos em HTML.

Mas consegui resolver de boa.

 

Acontece que eu pego um retorno do Correio de uma página em PHP e recebo as variáveis dela no ASP, e vinha num formato que deixava os acentos desconfigurados.

Mas tá tudo certo agora!
Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.