我在 Stack 和其他论坛上阅读了很多帖子,但仍然不知道如何使其工作。
配置
按照其他线程,我制作了一个测试文件
该页面设置为最简单的测试,顶部有一个表格,下面列出了结果。
所有简单文本均已正确处理,而任何 emoji 都会被读取为 ?
For example, if this is the text passed through the form -> hello 😀 😃 😄 😁 😆 😅 😂
this is what is returned -> hello ? ? ? ? ? ? ?
在Workbench 8中执行相同的SELECT查询,显示带有表情符号的正确文本,因此这不是与代码页或字符集直接相关的问题,也不是与写入数据时直接相关的问题,而仅是在读取数据时的问题。
VarType 将 RS("Field") 报告为简单字符串 / 8。
我花了最后几天的时间研究和测试所有可能的解决方案,但无法解决它:/
<%@Language="VBScript" CodePage="65001"%>
<% Option Explicit %>
<%
' THE PAGE ENCODING
Response.ContentType = "text/html;charset=UTF-8"
Session.CodePage = 65001
Response.CodePage = 65001
Response.CharSet = "UTF-8"
'----------------------------------------------------------------
dim dbConn, sql, RS
' SIMPLE CONNECTION STRING
' NOTE THAT I'VE TRIED BOTH charset=ucs2 AND charset=utf8mb4
Set dbConn = Server.CreateObject ("ADODB.Connection")
dbConn.Open "DRIVER={MySQL ODBC 8.0 UNICODE Driver}; SERVER=127.0.0.1; PORT=3306; DATABASE=test; Uid=user; Pwd=password; charset=ucs2;"
'----------------------------------------------------------------
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test MySQL UTF-8</title>
</head>
<body>
<form action="?action=insert" method="post" accept-charset="utf-8">
<textarea name="text"></textarea>
<input type="submit" value="Insert">
</form>
<%
'----------------------------------------------------------------
' INSERT THE STRING WHEN THE FORM IS SUBMITTED
If Request.Querystring("action") = "insert" Then
sql = "INSERT INTO table (Field) VALUES(AES_ENCRYPT('" & Request.Form("text") & "', 'AES_Key'))"
Response.Write(sql & "</br>")
dbConn.execute(sql)
End If
'----------------------------------------------------------------
' LIST ALL THE RECORDS FROM THE TABLE
sql = "SELECT CONVERT(AES_DECRYPT(Field, 'AES_Key') USING utf8mb4) AS Field FROM table"
Set RS = dbconn.execute(sql)
Do Until RS.EOF
Response.Write(RS("Field") & "</br>")
RS.MoveNext
Loop
RS.close
dbConn.close
%>
</body>
</html>
作为一名经典 ASP 开发人员,我已经发布了这个问题的答案,使得能够从 MySQL/MariaDB 数据库中正确且成功地读回表情符号(以及 BMP 之外的 4 字节字符) .
希望这有帮助!