Bạn có cơ hội nhận được các chữ cái tiếng Slovenia theo ánh xạ này và một đoạn trích từ bài viết wiki Windows-1252 :
Đây là những việc cần làm:
-
Sử dụng các tệp được mã hóa UTF-8 (không có BOM) để chống lại khả năng chứa văn bản được mã hóa cứng. (✔ đã hoàn thành)
-
Chỉ định UTF-8 cho bộ ký tự phản hồi với ASP ở phía máy chủ hoặc với thẻ meta ở phía máy khách. (✔ đã hoàn thành)
-
Cho Máy chủ MySQL biết các lệnh của bạn nằm trong bộ ký tự utf-8 và bạn mong đợi các bộ kết quả được mã hóa utf-8. Thêm câu lệnh ban đầu vào chuỗi kết nối:
...;stmt=SET NAMES 'utf8';...
-
Đặt Response.CodePage thành 1252.
Tôi đã thử nghiệm tập lệnh sau và nó hoạt động giống như một sự quyến rũ.
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>
Như một nhận xét cuối cùng:
Khi bạn cần áp dụng mã hóa html cho các chuỗi được tìm nạp từ cơ sở dữ liệu, bạn không nên sử dụng Server.HTMLEncode nữa do Response.Codepage là 1252 ở phía máy chủ và vì Server.HTMLEncode là mã hóa ngữ cảnh phụ thuộc, điều này sẽ gây ra kết quả đầu ra vô nghĩa.
Vì vậy, bạn sẽ cần phải viết bộ mã hóa html của riêng mình để xử lý trường hợp này.
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)