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

use*_*228 3 sql utf-8 character-encoding asp-classic

所以我遇到了正确转换法语字符的问题.基本上,我有一个将数据发送到SQL数据库的表单.然后,在另一页上,检索来自该DB的数据并将其显示给用户.但是数据(字符串)显示的是错误的损坏字符,因为另一页上表单中的输入是法语.我通过使用以下函数克服了这个问题,该函数将字符串转换为正确的字符集.但是,显然更好的解决方案是将其转换为FIRST然后将其发送到数据库.现在这里是将从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
Run Code Online (Sandbox Code Playgroud)

我从这里得到了这个功能:经典ASP - 如何将UTF-8字符串转换为UCS-2?

现在我的问题是,我使用什么函数来预先转换字符串然后将它们发送到数据库,这样当我检索它们时它们会很好用?

试过保罗的方法:

所以有第1页和第2页.第1页包含一个表单,当提交时,它将字符串发送到DB,然后在第2页中检索.我通过删除函数ConvertFromUTF8并将其保留原来的方式尝试了Paul的解决方案. (它返回了奇怪的芒果人物).之后,我在第1页和第2页的顶部添加了以下行.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
Run Code Online (Sandbox Code Playgroud)

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

Response.CodePage = 65001 
Response.CharSet = "UTF-8" 
Run Code Online (Sandbox Code Playgroud)

但它不起作用:(

编辑:它有效!,非常感谢大家的帮助!我需要做的只是在第3页(我甚至没有谈到)之上添加"CodePage = 65001",其中写入数据库部分正在发生.

Lan*_*art 8

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

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

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

  1. 每个页面都需要使用编码双重检查来保存,UTF-8因为某些IDE将默认为Windows-1252(通常也误称为"ANSI").
  2. 每个页面都需要添加以下行作为页面中的第一行,为了使这更容易,我将其与包含文件中的其他一些值放在一起,这样我就可以在每个页面中包含它们.

    包含文件 - page_encoding.asp

    <%@Language="VBScript" CodePage = 65001 %>
    <% 
      Response.CharSet = "UTF-8"
      Response.CodePage = 65001
    %>
    
    Run Code Online (Sandbox Code Playgroud)

    用法在ASP页面的顶部(更喜欢放在网络根目录下的配置文件夹中)

    <!-- #include virtual="/config/page_encoding.asp" -->
    
    Run Code Online (Sandbox Code Playgroud)

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

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

按照以下步骤操作,您的页面就可以正常工作,目前您的问题是某些页面被解释为Windows-1252正在处理其他页面,而UTF-8您最终会遇到编码不匹配的问题.


Pau*_*aul 6

通常 - 这个词有一个很长的延伸 - 你不需要手头转换,更不鼓励。在你的 asp 页面的顶部你写:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
Run Code Online (Sandbox Code Playgroud)

告诉 ASP 发送和接收(从服务器的角度来看)UTF-8。此外,它指示解释器使用 2 字节字符串。因此,当写入数据库或从数据库读取时,一切都会自动进行,因此如果您的数据库使用 1 字节char或 2 字节nchar转换,则需要注意。实际上就是这样。您可以通过使用此集合进行测试来测试是否一切顺利:

áäÇçé?ëí??óöçÖöÚü

该集合包含一些“欧洲”字符和一些“Unicode”字符……如果您使用代码页 1252,这些 Unicode 将始终失败,因此它是一个不错的测试集。