经典 ASP、MySQL 或 ODBC UTF8 编码

2023-12-08

我有一个由 GoDaddy 托管的网站,包括后端的 MySQL 数据库。该网站是斯洛文尼亚网站,因此使用了特殊字符。

该网站是用经典 ASP 构建的,我在 Notepad++ 中创建了所有页面,其中使用了 utf-8 编码。在每个页面的顶部,我还有 Session.CodePage=65001、Session.LCID=1060 和 Response.Charset="utf-8"。 MySQL 数据库和所有表也都是 utf8 编码。

如果我通过 Workbench 界面直接查看 db 中的数据,一切正常,包括我使用的一些特殊的斯洛文尼亚字符,例如:č

如果我访问我的网站,斯洛文尼亚语字符也打印得很好,包括 č

唯一的问题是,在同一页面上,从 MySQL 检索的数据编码不正确,因此字母 č 变成 ?

可能是什么问题以及如何解决?

首先我以为它是 MySQL ODBC 3.51 驱动程序,我用它来连接到数据库。我尝试将 charset=utf8 添加到连接字符串,但没有成功。我还尝试将 charset=ucs2 添加到连接字符串中,这是我在另一个网站上找到的提示,但它也没有帮助。 GoDaddy 不支持 MySQL ODBC 5.1 驱动程序,这可能是一个解决方案。

我已经没有选择了,所以请帮忙。


您有机会根据此获得斯洛文尼亚字母mapping以及摘录自Windows-1252 维基文章:

根据 Microsoft 和 Unicode Consortium 网站上的信息, 位置 81、8D、8F、90 和 9D 未使用;然而,Windows API多字节到宽字符将这些映射到相应的C1控制码.

位置 80 处的欧元字符在此代码页的早期版本中不存在, S、s、Z 和 z 也没有带有卡隆 (háček)。

以下是要做的事情:

  1. 使用 UTF-8(无 BOM)编码文件可避免包含硬编码文本。 (✔ 已经完成)

  2. 在服务器端使用 ASP 或在客户端使用元标记为响应字符集指定 UTF-8。 (✔ 已经完成)

  3. 告诉 MySQL 服务器您的命令采用字符集 utf-8,并且您期望 utf-8 编码的结果集。将初始语句添加到连接字符串:...;stmt=SET NAMES 'utf8';...

  4. 将 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, "&", "&amp;")
    str = Replace(str, "<", "&lt;")
    str = Replace(str, ">", "&gt;")
    str = Replace(str, """", "&quot;")
    MyOwnHTMLEncode = str
End Function
'Response.Write MyOwnHTMLEncode(rs("myfield").value)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典 ASP、MySQL 或 ODBC UTF8 编码 的相关文章

  • 在mysql中搜索“SanF”时获取旧金山的记录

    当我搜索 SanF 时获得 San Francisco 记录 SELECT FROM table WHERE col LIKE san Works SELECT FROM table WHERE col LIKE san F Works S
  • MySQL 触发器和 SUM()

    我有两张桌子 学生桌和家庭桌 在学生中 我有列 st venue 和total venue 家里我有收入 Total Revenue 是学生 st 收入与家庭收入之和 其中 family id student student id stud
  • Spark SQL/Hive 查询通过 Join 永远持续下去

    所以我正在做一些应该很简单的事情 但显然它不在 Spark SQL 中 如果我在 MySQL 中运行以下查询 查询将在不到一秒的时间内完成 SELECT ua address id FROM user u inner join user a
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 如何在 Eclipse 中用阿拉伯语读写

    我在 eclipse 中编写了这段代码来获取一些阿拉伯语单词 然后打印它们 public class getString public static void main String args throws Exception PrintS
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • #1045 - 用户“root”@“localhost”的访问被拒绝(使用密码:YES)

    这可能看起来多余 但我无法找到正确的解决方案 我无法使用 mysql 控制台登录 mysql 它要求输入密码 但我不知道我实际输入的内容 有办法获取密码或更改密码吗 这就是我的 config inc 的样子 当我尝试打开 phpmyadmi
  • 从数据库 MYSQL 和 Codeigniter 获取信息

    如果你们需要其他信息 上一个问题就在这里 从数据库中获取信息 https stackoverflow com questions 13336744 fetching information from the database 另一个更新 尽
  • 如何在Vim中正确显示UTF-8字符

    我想要 需要编辑包含 UTF 8 字符的文件 并且我想使用 Vim 在我被指责问以前问过的问题之前 我已经阅读了有关编码 文件编码 s 术语编码等的 Vim 文档 用 google 搜索了该主题 并阅读这个问题 https stackove
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 哪个是识别关系或非识别关系中的子表?

    在表之间的识别和非识别关系的上下文中 MySQL 文档大量将表称为父表和子表 如何判断哪个表是父表 哪个表是子表 子表 A K A 弱实体 http en wikipedia org wiki Weak entity 是一个表 其主键属性d
  • MySQL 中的 UDF 性能

    我注意到 当查询在 SELECT 或 WHERE 子句中调用 UDF 时 MySQL 查询执行时间的性能会呈指数级下降 有问题的 UDF 查询本地表以返回标量值 因此它们不仅执行算术表达式 而且充当相关子查询 我通过简单地删除 UDF 并使
  • 项目链接在 Wamp 服务器上不起作用

    我正在另一台计算机上安装 Wamp 服务器来运行中型数据库和 UI 我已成功阻止 IIS 并将服务器路由到 Localhost 8080 但是每当我尝试从 localhost 主页访问我的项目时 在 www 文件中 我被重定向到页面未找到错
  • 如何使用 PATCH 更新简单的数据库字段?

    我是 php 和 API 的新手 我正在尝试学习这些方法 但我无法执行 PATCH 或 PUT 来更新我的简单 mysql 数据库 我使用了以下代码 if isset PATCH con mysqli connect localhost r
  • 错误代码 13,SELECT INTO OUTFILE 问题

    我试图了解使用 INTO OUTFILE 命令时不断遇到问题的原因 我总是收到这个错误 ERROR 1 HY000 Can t create write to file var www p1 txt Errcode 13 SELECT pa
  • 在 Ruby 1.8.7 中将带有二进制数据的 YAML 响应转换为 UTF-8

    我正在从 API 中提取响应并接收 response job unit count 1 slug Answers lc tgt ja body tgt binary 5Zue562U lc src en body src Answers j
  • MySQL:空间查询查找纬度/经度点是否位于给定边界内

    我正在研究谷歌地图搜索功能 其目的是找出 地理位置 点是否位于多边形内 如下图所示 我使用带有 Spatial 扩展的 mysql 5 6 20 我知道它内置有用的几何函数 因此我可以直接从数据库查询地理编码位置 我的目的是熟悉地理空间函数
  • 未知的表引擎“InnoDB”

    最近 我发现如果我有好的硬件 我可以最大限度地提高 mysql 的性能 由于我一直在使用 InnoDB 所以我在 my ini 中添加了额外的配置 以下是新添加的配置 innodb data file path ibdata1 10M au
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 安装后步骤未成功完成 MySQL Mac OS Sierra

    pyEnv Anants MacBook Pro litibackend anantchandra brew postinstall mysql gt Postinstalling mysql gt usr local Cellar mys

随机推荐

  • 匿名方法/Lambda(编码标准)

    在 Jeffrey Richter 的 CLR via C net 2 0 版第 353 页 中 他表示 作为一种自律 他从不使匿名函数的代码长度超过 3 行 他主要引用可读性 可理解性作为他的理由 这很适合我 因为我已经养成了使用匿名方法
  • Laravel - 更改特定 URL 的数据库连接?

    我对使用 Laravel 框架相当陌生 我有以下要求 我有一个域 example com 它的整个代码堆栈都在 laravel 中运行 假设在配置中默认数据库连接是 db1 现在 如果网址变为 example com country 我希望
  • JDBC 4 的 java.sql.Clob.free() 方法和向后兼容性

    我正在调查一个有趣的性能问题 其中没有调用java sql Clob free 在经常使用的资源上 这个方法在Clob是在 Java 6 JDBC 4 中引入的 因此这很可能实际上是从 JDBC 3 升级到 JDBC 4 时引入的回归 这是
  • Python OpenCV 实时人脸检测裁剪保存

    我对此进行了大量的研究 我认为我的逻辑已经磨损了 几乎在那里 但似乎无法理解为什么 cv2 imshow 窗口中没有显示任何内容 只是一个灰色的框 但好消息是我是能够检测脸部并裁剪该脸部 然后将其保存在文件夹中 你能告诉我我哪里出了问题吗
  • 旋转和移动画布元素中的图像?

    我想在元素中移动和旋转球的图像 球的尺寸为 68x68 画布的尺寸为 300x200 球沿着 x 和 y 轴移动 当它撞到墙壁时翻转它的 x 和 y 速度 所有这些都有效 我只是不知道如何在运动的基础上进行旋转 我的draw 函数每30毫秒
  • 来自 glmer 的反向变换系数以及用于预测的缩放自变量

    我使用以下方法安装了混合模型lme4包裹 我用以下方法转换了自变量scale 拟合模型之前的函数 我现在想使用以下方式在图表上显示我的结果predict 所以我需要将预测数据恢复到原始规模 我该怎么做呢 简化示例 database lt m
  • 无法从 Linux 容器切换到 Windows 容器

    我最近从头开始重建我的电脑 我已经安装了 Windows 版 Docker 我无法从 Linux 容器切换到 Windows 容器 这是我得到的错误 Error response from daemon open pipe docker e
  • 如何打印完整的 NumPy 数组而不截断?

    当我打印 numpy 数组时 我得到一个截断的表示 但我想要完整的数组 gt gt gt numpy arange 10000 array 0 1 2 9997 9998 9999 gt gt gt numpy arange 10000 r
  • 如何计算具有指数的字符串

    Javax ScriptEngine 和 JEval 的工作原理类似 您输入一个字符串并将其发送给它进行评估 它会返回您的结果 在 ScriptEngine 中 在 JEval 中几乎相同 System out println engine
  • VSCode:快速切换flutter版本

    所以 我使用的是 flutter 2 2 3 版本 现在无法升级 但是 我的另一个项目需要更高的SDK 我知道 有FVM 但我发现了这个 如何在同一设备上针对不同项目使用两个版本的flutter 并引用文章 https dartcode o
  • c#: SetScrollPos (user32.dll)

    我想要 2 个 丰富的 文本框 bc 2k8 具有相同的滚动 所以当我滚动 tb1 时 tb2 滚动到相同的位置 我使用这个功能 DllImport user32 dll static extern int SetScrollPos Int
  • Go 中空接口的最佳实践?

    我正在学习空接口 我发现虽然在 Stackoverflow 上有很多关于空接口的含义及其工作方式的解释 但关于何时 为何使用它们 何时避免 考虑因素是什么以及如何使用它们的最佳实践信息却很少 选择使用它们的优点和缺点 在 Go 聊天室中 我
  • knit/rmarkdown/Latex:如何交叉引用图形和表格?

    我正在尝试交叉引用使用knitr rmarkdown 生成的PDF 中的图形和表格 关于 SO 和 tex stackexchange 有一些问题 here and here 例如 建议内联执行此操作的方法是添加 ref fig my fi
  • 将 _blank 添加到所有外部链接[重复]

    这个问题在这里已经有答案了 可能的重复 获取 A 元素的 href 属性 解析 href 标签中包含特定单词的所有链接 我使用以下函数将 blank 添加到我网站上的所有链接 function targetBlank text return
  • PHP 中的 curl_setopt() 中 RETURNTRANSFER 常量的用途

    我想了解 PHP 中curl 的工作细节 有什么用curl setopt ch curl returntransfer true 我搜索了很多网站但没有得到答案 那么请告诉我这个特殊的功能 为什么我们使用CURL RETURNTRANSFE
  • 重复的局部变量和变量无法解析

    我的 java 代码中出现了三个不同的错误 有什么帮助吗 错误一 重复的局部变量乘积 int product input nextInt 错误 2 productTotal 无法解析为变量 System out printf 10 2f n
  • setTimeout 存在字段更新的循环问题

    我正在尝试循环遍历计时器上的列表 当前为 1 秒 但我希望它更快 问题是当前值没有在视觉上更新 我不明白为什么 当我循环遍历时Firebug it works按预期但没有萤火虫它没有显示文本更改 它是否以某种方式跳过文本更新 我把定时器设置
  • 如何使用 xml starlet 插入实体

    我试图用包含 符号的文本替换属性值
  • iOS 中捆绑资源中的 Sqlite3

    您好 我计划从我的项目资源文件夹添加静态 SQLite3 但我不知道我是否正确执行 到目前为止 这是我的进展 创建 SQLite3 数据库SQLite 数据库浏览器 Copied Sqlite3 Database to my project
  • 经典 ASP、MySQL 或 ODBC UTF8 编码

    我有一个由 GoDaddy 托管的网站 包括后端的 MySQL 数据库 该网站是斯洛文尼亚网站 因此使用了特殊字符 该网站是用经典 ASP 构建的 我在 Notepad 中创建了所有页面 其中使用了 utf 8 编码 在每个页面的顶部 我还