小编典典

将UTF-8字符串经典ASP转换为SQL数据库

sql

所以我在正确转换法语字符时遇到问题。基本上,我有一个将数据发送到SQL数据库的表单。然后,在另一页上,从该数据库中检索数据并显示给用户。但是数据(字符串)显示的字符却很奇怪,因为另一页上的表单输入是法语。我通过使用以下将字符串转换为正确字符集的函数克服了这个问题。但是,显然更好的解决方案是先将其转换,然后将其发送到数据库。现在,这里是将从数据库检索到的字符串转换为适当字符集的代码:

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

现在我的问题是,我应该使用什么函数来预先转换字符串,然后将其发送到数据库,以便在我检索它们时可以使用?

尝试过保罗的方法:

因此,有第1页和第2页。第1页包含一种表单,提交后将其发送到DB,然后在第2页中检索该字符串。我尝试了Paul的解决方案,方法是删除函数ConvertFromUTF8并将其保留为以前的样子(它返回了奇怪的芒果字符)。之后,我在第1页和第2页的顶部添加了以下行。

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

在这两个页面上我也都有以下内容:

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

但这没有用:(

编辑:它有效!,非常感谢大家的帮助! 我需要做的就是在第3页的顶部添加“ CodePage =
65001”(我什至没有谈论过),在该处正在写DB部分。


阅读 232

收藏
2021-05-05

共1个答案

小编典典

保罗的回答没错,但这不是故事的唯一部分

您将需要执行以下每个步骤,以确保获得一致的结果。

重要说明: 这些步骤必须在Web应用程序的每个页面上执行,否则您将遇到问题(以Paul的评论为重点)。

  1. 每个页面都需要使用编码进行 保存,UTF-8请仔细检查,因为某些IDE会默认使用它Windows-1252(通常也被误命名为“ ANSI”)。
  2. 每个页面都需要在页面的第一行中添加以下行,为使此操作更容易,我将其与其他一些值一起包含在包含文件中,以便在进行过程中可以将它们包含在每个页面中。

包含文件-page_encoding.asp

    <%@Language="VBScript" CodePage = 65001 %>
<% 
  Response.CharSet = "UTF-8"
  Response.CodePage = 65001
%>

在ASP页顶部的用法(最好放在Web根目录的config文件夹中)

    <!-- #include virtual="/config/page_encoding.asp" -->

Response.Charset = "UTF-8"等效;charset于在HTTPcontent-type标头中设置。
Response.CodePage = 65001告诉ASP将所有动态字符串处理为UTF-8

  1. 页面中的包含文件也必须使用编码 保存UTF-8(也请仔细检查)。

请按照以下步骤操作,您的页面将正常工作,当前的问题是某些页面被解释为页面,Windows-1252而另一些页面被视为页面,UTF-8最终导致编码不匹配。

2021-05-05