【发布时间】:2014-03-18 22:35:55
【问题描述】:
所以我在正确转换法语字符时遇到了问题。基本上,我有一个将数据发送到 SQL 数据库的表单。然后,在另一个页面上,从这个 DB 中检索数据并将其显示给用户。但是数据(字符串)显示时带有奇怪的损坏字符,因为另一页表单中的输入是法语。我通过使用以下将字符串转换为正确字符集的函数克服了这个问题。但是,显然更好的解决方案是先将其转换,然后将其发送到数据库。下面是将从数据库检索到的字符串转换为适当字符集的代码:
Function ConvertFromUTF8(sIn)
Dim oIn: Set oIn = CreateObject("ADODB.Stream")
oIn.Open
oIn.CharSet = "WIndows-1252"
oIn.WriteText sIn
oIn.Position = 0
oIn.CharSet = "UTF-8"
ConvertFromUTF8 = oIn.ReadText
oIn.Close
End Function
我从这里得到这个函数:Classic ASP - How to convert a UTF-8 string to UCS-2?
现在我的问题是,我使用什么函数来预先转换字符串,然后将它们发送到数据库,这样当我检索它们时它们就可以使用了?
试过保罗的方法:
所以有第 1 页和第 2 页。第 1 页包含一个表单,提交时,该表单将字符串发送到数据库,然后在第 2 页中检索该数据库。我尝试了 Paul 的解决方案,方法是删除函数 ConvertFromUTF8 并将其保留为那是以前(它返回了奇怪的芒果字符)。之后,我在第 1 页和第 2 页的顶部添加了以下行。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
我在这两个页面上也有以下内容:
Response.CodePage = 65001
Response.CharSet = "UTF-8"
但它没有工作:(
编辑:它有效!非常感谢大家的帮助! 我需要做的就是在第 3 页的顶部添加“CodePage = 65001”(我什至没有谈到),其中正在写入数据库部分。
【问题讨论】:
-
您真的需要进行转换吗?这些天的标准程序是对输入表单使用 utf-8 编码,对输出页面使用 utf-8。这个网站上有很多关于这个问题的问题,这里有一篇非常有用的博客文章。 hanselman.com/blog/InternationalizationAndClassicASP.aspx
-
@John 实际上
<meta>标记和Content-Type响应标头中的Charset声明是多余的。当没有提供其他信息时,浏览器默认为 UTF-8。但是,也需要设置Session.CodePage = 65001。 -
如果你真的想走这种奇怪的方式,那么只需使用你的函数来转换发布的字符串,然后将它们保存在你的数据库中
-
您的表单首先需要处理
UTF-8而不是Windows-1252,一旦您这样做,您的字符将在输入到数据库和再次输出时保持一致。使用@Paul suggestion。 请记住: 1. 您的 asp 页面需要保存为UTF-8而不仅仅是声明。 2. 您需要在页面顶部指定<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>3. 使用Response.CodePage = 65001和Response.Charset = "UTF-8"告诉服务器返回字符串为UTF-8并告诉浏览器使用UTF-8编码. -
@Lankymart 我尝试了上述方法,但没有成功(问题编辑:请参阅“尝试保罗的方法)。如何确保 asp 页面保存为 UTF-8?
标签: sql utf-8 asp-classic character-encoding