- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
重复线程注释
我已经针对这个问题提出了类似的问题 (Emoji data retrieved via ODBC Connection appears as question mark),但更多的是关注经典 ASP 页面的设置,但我现在提出一个问题以寻求 ODBC 驱动程序的帮助,因为我认为我遇到的问题与此有关。
环境细节
我从经典 ASP 页面连接到 MySQL 版本 5.5.50-log(问题也在 5.7.28-log 和 MySQL 8 上复制)。全部运行 32 位 MySQL 服务器,使用 32 位 ODBC 驱动程序。
我在 Windows 10 PC 上运行代码,但实时站点在 Windows 2012 Server 上运行。两个系统都存在此问题。
问题
问题是,当我使用 ODBC 驱动程序连接到 MySQL 并显示输出时,表情符号数据显示为 ?
而不是表情符号,即使我可以看到表情符号已正确保存在数据库中。只是在通过ODBC提取并显示在页面上时,显示为?
字符。
MySQL 详细信息
MySQL数据库设置如下:
数据库字符集:utf8mb4数据库整理:utf8mb4_general_ci表和字段:
字符集:utf8mb4整理:utf8mb4_general_ci
根据我所见,MySQL 数据库在整理等方面设置正确:
Variable_name Value
------------------------ --------------------
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server latin1
character_set_system utf8
collation_connection utf8mb4_general_ci
collation_database utf8mb4_general_ci
collation_server latin1_swedish_ci
为了测试,我在表中有数据,其中包含此字符串:🍔(T_T) é, è, à, ç
这是来自 SQLyog 的数据的屏幕截图:
测试网页
这是我的测试网页:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body>
<p>Pasted directly from database field: 🍔(T_T) é, è, à, ç</p>
<p>Returned from SQL statement: ?(T_T) é, è, à, ç</p>
</body>
</html>
关于该问题的更多说明
问题不是emoji数据不能显示在网页上,因为直接从MySQL粘贴的内容显示正常。
问题是,一旦数据通过 ODBC 驱动程序从 MySQL 的 SQL Select 返回,它就无法正确呈现。
关于经典 ASP 页面设置的注意事项
我在 ASP 代码的顶部设置了以下内容:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"
ASP 页面本身保存为 UTF-8 编码文件:
我知道表情符号数据在页面上显示正常,因为来自 MySQL 的粘贴内容可以正确呈现。
ODBC 驱动程序说明
我认为问题与 ODBC 连接器有关,但我已经尝试了所有我能想到的方法,但没有任何效果。
我试过这些驱动程序:
我已尝试使用连接字符串和 DSN 连接,所有这些问题都会发生。
示例连接字符串:
oConn.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}; port=33066; option=16387; server=localhost; database=db1083; user=cheese; password=string; option=3; charset=utf8mb4; stmt=set names 'utf8mb4';"
我已尝试使用 DSN 连接并设置连接属性并启用正确的字符集,并在支持使用它的旧版 ODBC 驱动程序上设置初始语句。
我现在没主意了!
这可能是 ODBC 驱动程序的错误吗?
最佳答案
据我所知,使用 ADODB 和 MySQL 连接器/ODBC 检索 Unicode 补充字符(例如,表情符号)的唯一方法是将它们检索为字节 — SELECT CAST(column_name AS BINARY)
- 然后解码它们。以下示例实际上是 VBA,但针对 VBScript 进行微调是微不足道的。
Option Explicit
Sub demo_retrieve_utf8mb4_value()
Dim conn As New ADODB.Connection
conn.Open _
"DRIVER=MySQL ODBC 8.0 Unicode Driver;" & _
"SERVER=localhost;PORT=3307;" & _
"UID=root;PWD=(whatever);" & _
"DATABASE=mydb;" & _
"charset=utf8mb4;"
Dim rst As New ADODB.Recordset
rst.Open "SELECT CAST(emoji AS BINARY) FROM emoji_tbl WHERE id=1", conn
Dim s As Variant
s = decode_utf8(rst.Fields(0).Value)
'
' do stuff with the string value
End Sub
Private Function decode_utf8(field_value As Variant) As Variant
If IsNull(field_value) Then
decode_utf8 = Null
Else
Dim strm As New ADODB.Stream
With strm
.Type = adTypeBinary
.Open
.Write field_value
.Flush
.Position = 0
.Type = adTypeText
.Charset = "UTF-8"
decode_utf8 = .ReadText
.Close
End With
Set strm = Nothing
End If
End Function
关于mysql - Windows ODBC 驱动程序 - 检索到的表情符号数据呈现为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010774/
我遇到了 Handlebars 表达式 {{!< default}}我不明白。在问这个问题之前,我曾尝试在谷歌上搜索答案。但是,我找不到任何答案。谁能解释一下这个表达式是什么意思? 最佳答案 在 Ha
经常有朋友问起,如何在im即时通讯中实现发送图片、视频、语音和表情? 为此,小编特意写了一个vue版本的demo,实现了图片视频文件和表情的的发送,参考这个demo源代码,相信你就可以轻松的用un
这里是一个网站 ( https://twitchemotes.com/apidocs ),它展示了一个用于获取 twitch 表情的 API(基本上是描述属于不同用户的一组图像的 json)。 API
使用 Python 3,像下面这样的简单脚本应该按预期运行,但似乎会因 unicode 表情字符串而窒息: import re phrase = "(╯°□°)╯ ︵ ┻━┻" pattern = r
我试图弄清楚表情符号(表情)选择是如何在 Facebook 应用和 Google Hangouts 应用上实现的。我查看了 Android API 示例中的 SoftKeyboard 演示应用程序,但
我正在尝试在 android 通知文本中显示笑脸(或图像范围)。它不起作用。有人知道怎么做吗?谢谢。 代码如下: SpannableStringBuilder builder = new Spanna
我是一名优秀的程序员,十分优秀!