Buenas a tod@s,
Llevo durante unas horas peleándome con un tema. La situación es la siguiente:
Tengo 3 páginas, una principal y 2 cargas por ajax, todas ellas en ASP clásico. Las cargas ajax son para rellenar varios select (el típico de Provincia/Localidad/Código Postal), el problema me surge durante la comunicación con ellas...
Todas mis páginas están perfectamente advertidas que son ISO-8859-1 (también conocido como Windows 1252) con códigos como estos:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
Response.Charset = "iso-8859-1"
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Y en las respuestas aunque son HTML coloqué esto:
<?xml version="1.0" encoding="ISO-8859-1"?>
He probado también esto:
ajax.setRequestHeader("Accept-Charset", "ISO-8859-1");
ajax.setRequestHeader("Content-Type", "text/xml; charset=iso-8859-1");
ajax.send(null);
El problema está en que cuando solicito las provincias y las localidades no tengo ningún problema, veo las tildes y las "ñ", pero cuando envío la variable del nombre de la localidad para sacar sus códigos postales no me devuelve nada en las SELECT que incluyen tilde o Ñ en todos los navegadores salvo Internet Explorer 8 (que mágicamente en él no tengo problema y sí se realiza toda la comunicación en iso-8859-1). He podido comprobar que es porque al enviarlas, Ajax me lo envía en UTF-8 al servidor web y no conozco ninguna forma de cambiar esto o de transformar algo en UTF-8 a Windows 1252 desde ASP.
Mi base de datos está codificada en ISO-8859-1 y desconozco si es capaz de devolverme los datos en UTF-8 ya que lo intenté pero me daba error (es ASA).
Pongo el código en cualquier caso por si fuese necesario:
Código ASP:
Ver original<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% Option Explicit %>
<?xml version="1.0" encoding="ISO-8859-1"?>
<% ' Especificamos envío de conjunto de caracteres
Response.Charset = "iso-8859-1"
If Request.QueryString("prov") = 99 Or Request.QueryString("prov") = "" Then
%>
<input class="singlefield" type="text" name="cp" id="cp" value="" />
<%
Response.End
End If
If Request.QueryString("loc") = "" Then
%>
<input class="singlefield" type="text" name="cp" id="cp" value="" />
<%
Response.End
End If
Dim SQL, conexion, rsLocalidades, ArrayRecordSet, i, SizeArray
' Conecto y muestro error en caso de no lograr conectar
On Error Resume Next
'Abro conexión a BD interna y transacción
Set conexion = CreateObject("ADODB.Connection")
conexion.ConnectionString="DSN=BD Interna"
conexion.Open
conexion.BeginTrans
'Si no logro conectar, reseteo el número de error y conecto a servidor externo
If Err.Number <> 0 Then
On Error GoTo 0
On Error Resume Next
conexion.ConnectionString="DSN=MeetingPoint"
conexion.Open
conexion.BeginTrans
'No se logró conectar a ninguno de los dos, muestro error
If Err.Number <> 0 Then
Response.Write("Error, elija de nuevo.")
Response.End
End If
End If
' Lanzamos el RecordSet en modo 0, 1, 0 con cursor en local para tratar de reducir su tiempo de ejecución
Set rsLocalidades = Server.CreateObject("ADODB.Recordset")
rsLocalidades.CursorLocation = 3 'adUseClient
rsLocalidades.CursorType = 0 'adOpenForwardOnly
rsLocalidades.LockType = 1 'adLockReadOnly
SQL = "SELECT DISTINCT(codpostal) FROM codpostloc WHERE provincia = '" & Request.QueryString("prov") & "' AND " & _
"poblacion = '" & Request.QueryString("loc") & "' ORDER BY 1"
rsLocalidades.Open SQL, conexion
' Response.Write(SQL)
If Err.Number <> 0 Then
Response.Write("Error, seleccione localidad de nuevo.")
conexion.RollbackTrans
Response.End
End If
' Copio a un array el RecordSet, calculo tamaño máximo de la dimensión 2 (1-columna/2-fila) y cierro conexión
ArrayRecordSet = rsLocalidades.GetRows
SizeArray = UBound(ArrayRecordSet, 2)
' Response.Write("<br>" & ArrayRecordSet(0,0))
rsLocalidades.Close
conexion.RollbackTrans
conexion.Close
On Error Goto 0 %>
<% If SizeArray > 0 Or IsArray(ArrayRecordSet) Then %>
<select class="singlefieldcombo" id="cp" name="cp" >
<% If SizeArray > 0 Then %>
<option value=""></option>
<% End If %>
<% For i = 0 To SizeArray %>
<option value="<%=ArrayRecordSet(0, i)%>"><%=ArrayRecordSet(0, i)%></option>
<%Next %>
</select>
<% End If %>
Muchas gracias y un saludo.