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

将UTF-8字符串经典ASP转换为SQL数据库,sql,utf-8,asp-classic,character-encoding,Sql,Utf 8,Asp Classic,Character Encoding,所以我在正确转换法语字符方面遇到了问题。基本上,我有一个表单将数据发送到SQL数据库。然后,在另一个页面上,检索并向用户显示来自该数据库的数据。但数据(字符串)显示时使用了wierd损坏字符,因为另一页表单中的输入是法语。我通过使用以下函数克服了这个问题,该函数将字符串转换为正确的字符集。然而,显然更好的解决方案是首先转换它,然后将它发送到数据库。下面是将从DB检索到的字符串转换为相应字符集的代码: Function ConvertFromUTF8(sIn) Dim oIn: Set

所以我在正确转换法语字符方面遇到了问题。基本上,我有一个表单将数据发送到SQL数据库。然后,在另一个页面上,检索并向用户显示来自该数据库的数据。但数据(字符串)显示时使用了wierd损坏字符,因为另一页表单中的输入是法语。我通过使用以下函数克服了这个问题,该函数将字符串转换为正确的字符集。然而,显然更好的解决方案是首先转换它,然后将它发送到数据库。下面是将从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
我从这里得到了这个函数:

现在我的问题是,我应该使用什么函数来预先转换字符串,然后将它们发送到数据库,这样当我检索它们时,它们就可以正常运行了

尝试了保罗的方法:

这是第1页和第2页。第1页包含一个表单,该表单在提交时将字符串发送到DB,然后在第2页中检索该DB。我尝试了Paul的解决方案,从UTF8中删除了ConvertFromUTF8函数,并让它保持原来的状态(它返回了wierd-mangolian字符)。之后,我在第1页和第2页的顶部添加了以下行

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
但它不起作用:(

编辑:很有效!非常感谢大家的帮助!
我所需要做的就是在第3页(我甚至没有提到)的顶部添加“CodePage=65001”,在第3页上,正在写入数据库部分。

通常情况下,这个词有很长的长度-你不需要在手上转换,更不希望这样。在asp页面的顶部,你写:

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

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

Paul的答案没有错,但它不是唯一需要考虑的部分:

你需要完成这些步骤,以确保你得到一致的结果

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

  • 每个页面都需要使用
    UTF-8
    编码进行保存仔细检查这一点,因为某些IDE将默认为
    Windows-1252
    (也经常被误称为“ANSI”)

  • 每个页面都需要添加以下行作为页面的第一行,为了使这更容易,我将其与其他一些值一起放在一个包含文件中,这样我就可以将它们包含在每个页面中

    ###包含文件-page_encoding.asp###

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

    
    
    Response.Charset=“UTF-8”
    相当于在HTTP
    内容类型
    标题中设置
    ;Charset
    Response.CodePage=65001
    告诉ASP将所有动态字符串处理为
    UTF-8

  • 页面中的Include文件也必须使用
    UTF-8
    编码保存(同时仔细检查这些文件)


  • 按照这些步骤,您的页面将正常工作,您目前的问题是一些页面被解释为
    Windows-1252
    ,而另一些页面被视为
    UTF-8
    ,您最终的结果是编码不匹配。

    您真的需要进行转换吗?现在的标准程序是只使用UTF-8编码正在搜索输入表单,utf-8搜索输出页面。此网站上有大量关于此问题的问题,这里有一篇非常有用的博客文章。@John实际上,
    内容类型
    响应标题中的
    标记和
    字符集
    声明是多余的。如果没有其他信息,浏览器默认为utf-8但是,设置
    Session.CodePage=65001
    也是必要的。如果你真的想用这种奇怪的方式,那么只需使用函数转换发布的字符串,然后将它们保存到数据库中。你的表单首先需要处理
    UTF-8
    而不是
    Windows-1252
    ,一旦你这样做了,你的角色就可以了从输入到数据库和再次输出,将保持一致。使用@Paul。请记住:1.您的asp页面需要保存为
    UTF-8
    ,而不仅仅是声明。2.您需要在页面顶部指定
    3.使用
    Response.CodePage=65001
    Response.Charset=“UTF-8”
    告诉服务器以
    UTF-8
    的形式返回字符串,并告诉浏览器使用
    UTF-8
    编码。@Lankymart我尝试了上述方法,但无效(问题编辑:请参阅“尝试Paul的方法”)。如何确保asp页面保存为UTF-8?不,浏览器不需要
    标记来识别编码。事实上,您根本不应该将其放入。meta标记是覆盖
    内容类型的一种粗糙方法:
    响应头(出于某种原因,它被称为
    http equiv
    )。放入元标记只会为可能存在冲突的信息多打开一个位置(
    内容类型:
    标题vs.元标记vs.浏览器自动字符集检测)你说得太对了,我编辑了答案以反映你的评论。我尝试了Paul的方法,但没有效果。我尝试了各种各样的东西,比如元标记、response.codepage、response.charset等等。但它们都不管用。唯一管用的是u使用一个函数来转换字符串。所以我只需要在将字符串发送到DB@user1744228你真的需要更新你原来的问题,并向我们展示你是如何尝试保罗的建议的。如果你不熟悉编码的工作原理,那么编码可能是一场噩梦,很容易出错。但是强行通过你
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    
    áäÇçéčëíďńóöçÖöÚü