经典ASP,MySQL或ODBC UTF8编码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了经典ASP,MySQL或ODBC UTF8编码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3742字,纯文字阅读大概需要6分钟。
内容图文
![经典ASP,MySQL或ODBC UTF8编码](/upload/InfoBanner/zyjiaocheng/904/f3d77ee802a742fda41d2cc16b5882ff.jpg)
我有一个托管GoDaddy的网站,包括后端的MySQL数据库.该网站是斯洛文尼亚网站,因此使用了特殊字符.
该网站是用经典ASP构建的,我在Notepad中创建了所有使用utf-8编码的页面.在每个页面的顶部,我还有Session.CodePage = 65001,Session.LCID = 1060和Response.Charset =“utf-8”. MySQL db和所有表也都是utf8编码的.
如果我通过Workbench界面直接在db中查看数据,一切正常,包括我使用的一些特殊的斯洛文尼亚字符,如:?
如果我去我的网站,斯洛文尼亚字符也打印得很好,包括?
唯一的问题是,在同一页面上,从MySQL重新获得的数据编码不正确,所以字母be becommes?
可能是什么问题以及如何解决?
首先我认为它是MySQL ODBC 3.51驱动程序,我用它连接到db.我已经尝试将charset = utf8添加到连接字符串,但是没有用.我也尝试将charset = ucs2添加到连接字符串,这是我在另一个网站上找到的提示,但它也没有帮助. GoDaddy不支持MySQL ODBC 5.1驱动程序,这可能是一个解决方案.
我的选项用完了,所以请帮忙.
解决方法:
根据这个mapping和Windows-1252 wiki article的摘录你有机会获得斯洛文尼亚字母:
According to the information on Microsoft’s and the Unicode Consortium’s websites,
positions 81, 8D, 8F, 90, and 9D are unused; however, the Windows API
07002 maps these to the corresponding 07003.The euro character at position 80 was not present in earlier versions of this code page,
nor were the S, s, Z, and z with caron (há?ek).
这是要做的事情:
>使用UTF-8(无BOM)编码文件,以防止包含硬编码文本. (?已经完成)
>在服务器端使用ASP或在客户端使用元标记为响应字符集指定UTF-8. (?已经完成)
>告诉MySQL服务器你的命令是字符集utf-8,你期望utf-8编码的结果集.在连接字符串中添加一个初始语句:…; stmt = SET NAMES’utf8′; …
>将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, "&", "&")
str = Replace(str, "<", "<")
str = Replace(str, ">", ">")
str = Replace(str, """", """)
MyOwnHTMLEncode = str
End Function
'Response.Write MyOwnHTMLEncode(rs("myfield").value)
内容总结
以上是互联网集市为您收集整理的经典ASP,MySQL或ODBC UTF8编码全部内容,希望文章能够帮你解决经典ASP,MySQL或ODBC UTF8编码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。