Vous avez une chance d'obtenir des lettres slovènes selon ce mappage et un extrait de article wiki Windows-1252 :
Voici les choses à faire :
-
Utilisez des fichiers encodés en UTF-8 (sans BOM) contre la possibilité de contenir du texte codé en dur. (✔ déjà fait)
-
Spécifiez UTF-8 pour le jeu de caractères de réponse avec ASP côté serveur ou avec des balises méta côté client. (✔ déjà fait)
-
Dites au serveur MySQL que vos commandes sont dans le jeu de caractères utf-8 et que vous attendez des jeux de résultats encodés en utf-8. Ajoutez une instruction initiale à la chaîne de connexion :
...;stmt=SET NAMES 'utf8';...
-
Définissez Response.CodePage sur 1252.
J'ai testé le script suivant et il fonctionne comme un charme.
LDD : http://sqlfiddle.com/#!8/c2c35/1
ASP :
<%@Language=VBScript%>
<%
Option Explicit
Response.CodePage = 1252
Response.LCID = 1060
Response.Charset = "utf-8"
Const adCmdText = 1, adVarChar = 200, adParamInput = 1, adLockOptimistic = 3
Dim Connection
Set Connection = Server.CreateObject("Adodb.Connection")
Connection.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=myDb;User=myUsr;Password=myPwd;stmt=SET NAMES 'utf8';"
If Request.Form("name").Count = 1 And Len(Request.Form("name")) Then 'add new
Dim rsAdd
Set rsAdd = Server.CreateObject("Adodb.Recordset")
rsAdd.Open "names", Connection, ,adLockOptimistic
rsAdd.AddNew
rsAdd("name").Value = Left(Request.Form("name"), 255)
rsAdd.Update
rsAdd.Close
Set rsAdd = Nothing
End If
Dim Command
Set Command = Server.CreateObject("Adodb.Command")
Command.CommandType = adCmdText
Command.CommandText = "Select name From `names` Order By id Desc"
If Request.QueryString("name").Count = 1 And Len(Request.QueryString("name")) Then
Command.CommandText = "Select name From `names` Where name = ? Order By id Desc"
Command.Parameters.Append Command.CreateParameter(, adVarChar, adParamInput, 255, Left(Request.QueryString("name"), 255))
End If
Set Command.ActiveConnection = Connection
With Command.Execute
While Not .Eof
Response.Write "<a href=""?name=" & .Fields("name").Value & """>" & .Fields("name").Value & "</a><br />"
.MoveNext
Wend
.Close
End With
Set Command.ActiveConnection = Nothing
Set Command = Nothing
Connection.Close
%><hr />
<a href="?">SHOW ALL</a><hr />
<form method="post" action="<%=Request.ServerVariables("SCRIPT_NAME")%>">
Name : <input type="text" name="name" maxlength="255" /> <input type="submit" value="Add" />
</form>
Comme une dernière remarque :
Lorsque vous devez appliquer l'encodage html aux chaînes extraites de la base de données, vous ne devez plus utiliser Server.HTMLEncode car Response.Codepage est 1252 côté serveur et puisque Server.HTMLEncode est une page de codes contextuelle dépendante, cela entraînera des sorties charabia.
Vous devrez donc écrire votre propre encodeur html pour gérer le cas.
Function MyOwnHTMLEncode(ByVal str)
str = Replace(str, "&", "&")
str = Replace(str, "<", "<")
str = Replace(str, ">", ">")
str = Replace(str, """", """)
MyOwnHTMLEncode = str
End Function
'Response.Write MyOwnHTMLEncode(rs("myfield").value)