Gemäß dieser Zuordnung und ein Auszug aus Windows-1252-Wiki-Artikel :
Folgendes ist zu tun:
-
Verwenden Sie UTF-8-codierte (ohne BOM) Dateien, um die Möglichkeit zu vermeiden, dass sie fest codierten Text enthalten. (✔ bereits erledigt)
-
Geben Sie UTF-8 für den Antwortzeichensatz mit ASP auf der Serverseite oder mit Meta-Tags auf der Clientseite an. (✔ bereits erledigt)
-
Teilen Sie dem MySQL-Server mit, dass Ihre Befehle im Zeichensatz utf-8 sind und Sie utf-8-codierte Ergebnismengen erwarten. Fügen Sie der Verbindungszeichenfolge eine erste Anweisung hinzu:
...;stmt=SET NAMES 'utf8';...
-
Setzen Sie Response.CodePage auf 1252.
Ich habe das folgende Skript getestet und es funktioniert wie am Schnürchen.
DDL: 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>
Als letzte Bemerkung:
Wenn Sie HTML-Codierung auf aus der Datenbank abgerufene Zeichenfolgen anwenden müssen, sollten Sie Server.HTMLEncode nicht mehr verwenden, da Response.Codepage serverseitig 1252 ist und da Server.HTMLEncode eine kontextabhängige Codepage ist, führt dies zu Kauderwelschausgaben.
Sie müssen also Ihren eigenen HTML-Encoder schreiben, um diesen Fall zu handhaben.
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)