Tras continuar pateándome Google llegué a la conclusión de que no había manera de decirle a Ajax que envíe los datos en otra codificación que no sea UTF8, por ello decidí que lo mejor sería cambiar de UTF8 a iso-8859-1 directamente desde ASP. Como no hay una función concreta que lo haga, encontré algo efectivo y que me funcionó:
Fuente: http://www.codetoad.com/asp_utf8.asp
Código ASP:
Ver original<%
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
%>
Al llamar a esa función dentro de mi código se acabaron los problemas de codificación:
Código ASP:
Ver original' Transformamos la localidad de UTF8 a iso-8859-1 si está codificada en UTF8
' ============ IMPORTANTE ============
' ************************************
' Hay que decodificarla así porque el string se recibe en UTF8 siendo de origen Windows 1252 y provoca caracteres raros
' como es UTF8 valid hay que decodificarlo para que se transforme en Windows 1252
' En caso de ser invalid es porque nos lo han enviado directamente en Windows 1252 (caso de IE8) que es lo que nos interesa, no lo tranformamos
If IsValidUTF8(Request.QueryString("loc")) Then
localidad = decodeUTF8(Request.QueryString("loc"))
Else
localidad = Request.QueryString("loc")
End If
Un saludo y espero que le sirva a alguien.