将UTF-8string经典ASP转换为SQL数据库

所以我正确地转换法文字符有问题。 基本上,我有一个表单发送数据到SQL数据库。 然后,在另一页上,来自该DB的数据被检索并显示给用户。 但是数据(string)被显示为错误的字符,因为另一页上的表单input是法文的。 我通过使用下面的函数将string转换为正确的字符集来克服这个问题。 但是,显然更好的解决scheme是将其转换为FIRST,然后将其发送到数据库。 现在这里是将从DB检索的string转换为相应的字符集的代码:

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 

我从这里得到这个函数: 经典的ASP – 如何将一个UTF-8string转换为UCS-2?

现在我的问题是,我用什么函数事先转换string,然后将它们发送到数据库,所以当我检索他们时,他们将是很好的去?

试过保罗的方法:

所以有第1页和第2页。第1页包含一个表单,当提交时,将string发送到数据库,然后在第2页中进行检索。我尝试了Paul的解决scheme,通过删除ConvertFromUTF8函数并保持原来的状态(它返回了怪异的芒果字符)。 之后,我在页面1和页面2的顶部添加了以下行。

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

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

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

但它没有工作:(

编辑:它的作品!,非常感谢你的帮助! 我所需要做的只是在第三页(我甚至没有谈到)上添加“CodePage = 65001”,在那里写数据库部分正在发生。

保罗的答案并不错,但它不是故事的唯一部分

您将需要经历以下每个步骤,以确保您获得一致的结果;

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

  1. 每个页面都需要使用UTF-8编码进行保存,因为有些IDE会默认使用Windows-1252
  2. 每个页面都需要添加以下行作为页面的第一行,为了使这个更容易,我把它和其他一些值放在一个包含文件中,这样我就可以将它们包含在每个页面中。

    包含文件 – page_encoding.asp

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

    在ASP页面的顶部使用(更喜欢把一个configuration文件夹放在网页的根目录下)

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

    Response.Charset = "UTF-8"等同于在HTTP content-type标题中设置;charsetResponse.CodePage = 65001告诉ASP将所有dynamicstring处理为UTF-8

  3. 在页面中包含文件也必须使用UTF-8编码进行保存 (也请仔细检查这些文件)。

按照这些步骤和你的网页将工作,你的问题在这个时刻是一些页面被解释为Windows-1252而其他人被视为UTF-8 ,你最后在编码不匹配。

通常情况下 – 这个词有一个非常长的延伸 – 你不需要转换,更不用说。 在你写的asp页面的顶部:

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

告诉ASP发送和接收(从服务器的angular度来看)UTF-8。 此外,它指示解释器使用2个字节的string。 所以,当写入数据库或从数据库读取时,所有的事情都是自动的,所以如果你的数据库使用1字节的char或2字节的nchar转换是照顾。 而实际上就是这样。 你可以用这个testing来testing一切是否顺利:

  áäÇçéčëíďńóöçÖöÚü 

这个集合包含一些'欧洲',但也有一些'Unicode'的字符…这些Unicode将永远失败,如果你使用代码页1252,所以这是一个很好的testing集。