Имате шанс за словенски букви според това картографиране и откъс от Wiki статия за Windows-1252 :
Ето какво трябва да направите:
-
Използвайте UTF-8 (без BOM) кодирани файлове срещу възможността да съдържат твърдо кодиран текст. (✔ вече е готово)
-
Посочете UTF-8 за набор от знаци за отговор с ASP от страна на сървъра или с мета тагове от страна на клиента. (✔ вече е готово)
-
Кажете на MySQL сървъра, че вашите команди са в набор от знаци utf-8 и очаквате кодирани в utf-8 набори от резултати. Добавете начален израз към низа за свързване:
...;stmt=SET NAMES 'utf8';...
-
Задайте Response.CodePage на 1252.
Тествах следния скрипт и той работи като чар.
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>
Като последна забележка:
Когато трябва да приложите html кодиране към низове, извлечени от базата данни, не трябва повече да използвате Server.HTMLEncode поради това, че Response.Codepage е 1252 от страната на сървъра и тъй като Server.HTMLEncode е зависима от контекста кодова страница, това ще доведе до безсмислени резултати.
Така че ще трябва да напишете свой собствен HTML енкодер, за да се справите със случая.
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)