【问题标题】:Emoji data retrieved via ODBC Connection appears as question mark通过 ODBC 连接检索的表情符号数据显示为问号
【发布时间】:2019-11-19 22:24:40
【问题描述】:

我从经典的 ASP 页面连接到 MySQL 版本 5.5.50-log。

MySQL 数据库设置如下:

  • 数据库字符集:utf8mb4
  • 数据库排序规则:utf8mb4_general_ci

表格和字段:

  • 字符集:utf8mb4
  • 排序规则:utf8mb4_general_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 代码中有如下设置:

Response.CodePage = 65001
Response.CharSet = "utf-8"

我尝试过其他变体 - 例如

Response.CodePage = 1252
Response.LCID = 1060
Response.Charset = "utf-8"

但他们没有任何区别。

我已经尝试了一系列 MySQL ODBC 驱动程序 - 例如。

''----------------------
''connection string
''----------------------

Dim oConn
set oConn = Server.CreateObject("ADODB.Connection")
'oConn.Open "DRIVER={MySQL ODBC 5.1 Driver}; Server=localhost; Database=mydb; User=root; Password=testing; Option=3; CharSet=utf8mb4; stmt=SET NAMES 'utf8mb4';"

这样不行……

我尝试使用系统 DSN 来代替这些驱动程序:

  • MySQL ODBC 5.1 驱动程序
  • MySQL ODBC 8.0 Unicode 驱动程序
  • MySQL ODBC 8.0 ANSI 驱动程序

他们都没有解决问题。

我想知道有没有办法解决这个问题,或者基本上没有办法显示使用 Classic ASP 从 MySQL 数据库中检索到的表情符号数据?

据我所知,从其他地方阅读,MySQL 数据库设置正确,支持存储表情符号字符,这一事实证实了我可以毫无问题地查看它存储在数据库中的事实。只是当我尝试通过经典 ASP 到 MySQL 连接将其从数据库中拉出时,表情符号字符才不会显示。

编辑 - ASP 页面本身保存为 UTF-8 编码文件:

【问题讨论】:

  • 仅使用Response 是不够的,ASP 页面需要以正确的编码保存,并且必须告知 IIS 将其读取为 UTF-8。见this answer
  • @Lankymart - 感谢您的回复。该页面保存为 UTF-8,我在问题末尾添加了一个屏幕截图以确认为编辑。
  • 建议通过these steps 并检查每个关闭。如果按照这些操作后仍然无法正常工作,我也会查看您正在使用的驱动程序。
  • 感谢@Lankymart - 我已将其设置在页面的最顶部:&lt;%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%&gt; 并根据您对所链接答案的建议设置 response.codepage 和 charset。没有喜悦。我已经尝试过 ODBC 8、5.1 和 3.51,但它们都没有成功。我尝试了连接字符串方法,并使用带有字符集和初始语句设置为 set names utf8mb4set names 'utf8mb4' 的系统 DNS,没有任何效果......我想我必须放弃它!
  • @Fehu 我从来没有让它工作。最后,我在需要提取可能包含表情符号数据的数据的页面上使用了 PHP。抱歉,我没有解决办法。

标签: mysql asp-classic odbc


【解决方案1】:

除了设置响应并将文件保存为 UTF-8 之外,您可能还需要像这样设置页面语言。请注意,这应该位于文件的最顶部,然后是其他任何内容:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
response.codepage = 65001
response.charset = "utf-8"
%>

我在编码方面做了很多努力,我们的系统有一半是由非 UTF 文件组成的,而这里的代码使我能够使用 UTF-8 来实现我自己的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2021-10-11
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多