字符集 UTF-8 和 CodePage 65001 在 ASP Classic 中没有正确返回

问题描述

在普通的 ASP Classic 文档中,我设置了 CodePage = 65001 和 Charset = UTF-8,但不知何故它没有返回正确的字符集(丹麦语) - 文档被保存为 UTF-8 编码 i Visual Studio Code

代码

<% 
  Response.CodePage = 65001
  Response.ContentType = "text/html"
  response.addheader "Content-Type","text/html;charset=UTF-8"
  Response.CharSet = "UTF-8"

  Response.Write "The Session code page is " & Session.CodePage & "<BR>" 
  Response.Write "The Response code page is " & Response.CodePage & "<BR>" 
  Response.Write "The Response Charset is " & Response.CharSet & "<BR>"
  Response.Write "<br>"
  Response.Write "Page with æ ø å"
  Response.End
%>

.. 它应该返回丹麦语 æ ø å,但返回以下内容

The Session code page is 65001
The Response code page is 65001
The Response Charset is UTF-8

Page with æ ø å

有人知道这里发生了什么吗? .. 同一站点中的所有其他页面都可以正常工作,我也尝试将代码复制到另一个文件,但这无济于事!

这里是整个ASP页面内容

<% 
  Response.CodePage = 65001
  Response.ContentType = "text/html"
  response.addheader "Content-Type","text/html;charset=UTF-8"
  Response.CharSet = "UTF-8"

  Response.Write "The Session code page is " & Session.CodePage & "<BR>" 
  Response.Write "The Response code page is " & Response.CodePage & "<BR>" 
  Response.Write "The Response Charset is " & Response.CharSet & "<BR>"
  Response.Write "<br>"
  Response.Write "Page with æ ø å"
  Response.End


    Dim strUser,strPassword,domain,AuthenticateUser,InsertToEFPLogsql,InsertToEFPlogobj,InsertToEFPLog,strQuery,oConn,cmd

    strUser = Request.Form("strUserName")
    strPassword = Request.Form("strPassword")


    Dim SettingsDeveloperConn
    Set SettingsDeveloperConn = Server.CreateObject("ADODB.Connection")
    SettingsDeveloperConn.ConnectionString="<CONNECTIONSTRING>"
    SettingsDeveloperConn.Open

    Dim SettingsDevelopersql,objSettingsDeveloper

    SettingsDevelopersql = "SELECT DeveloperAdminemail,DeveloperAdminHash FROM EFP_Settings WHERE ID = 1;"

    Set objSettingsDeveloper = SettingsDeveloperConn.Execute(SettingsDevelopersql)

    IF strUser = objSettingsDeveloper("DeveloperAdminemail") THEN

      IF strPassword = objSettingsDeveloper("DeveloperAdminHash") THEN

        AuthenticateUser = true
        Session("UserIsAuthenticated") = "true"
        Session("ADUserEmail") = strUser
        Session("DeveloperAdmin") = "true"

            
          Set InsertToEFPLog = Server.CreateObject("ADODB.Connection")
          InsertToEFPLog.ConnectionString="CONNECTIONSTRING"
          InsertToEFPLog.Open

          InsertToEFPLogsql = "INSERT INTO EFP_LOG (DataString,Operation,Area,ChangedBy,ContactID,ADdisplayName) VALUES ('" & strUser & " loggede p&aring;','Login','','Developer Admin','Developer Admin');"

          response.Write InsertToEFPLogsql
          Response.End

          Set InsertToEFPlogobj = InsertToEFPLog.Execute(InsertToEFPLogsql)
          InsertToEFPLog.Close
          Set InsertToGEFPLog = nothing


        Response.Redirect "index.asp"

      ELSE

        AuthenticateUser = false
        Session("tmpstrUserName") = strUser
        Response.Redirect "login.asp?AuthRejected=yes"

      END IF

    ELSE


    'on error resume next
    domain = "<DOMAIN CONTROLLER>"

    ' assume failure
    AuthenticateUser = false

    strQuery = "SELECT cn FROM 'LDAP://" & domain & "' WHERE objectClass='*' "
    set oConn = server.CreateObject("ADODB.Connection")
    oConn.Provider = "ADsDSOOBJECT"
    oConn.Properties("User ID") = strUser
    oConn.Properties("Password") = strPassword
    oConn.Properties("Encrypt Password") = true
    oConn.open "DS Query",strUser,strPassword

    set cmd = server.CreateObject("ADODB.Command")
    set cmd.ActiveConnection = oConn
    cmd.CommandText = strQuery
    on error resume next
    set oRS = cmd.Execute
    if oRS.bof or oRS.eof then
        AuthenticateUser = false
        Session("tmpstrUserName") = strUser
        Response.Redirect "login.asp?AuthRejected=yes"
    else

        Session("ADUserEmail") = strUser

        Dim arr
        arr = Split(Session("ADUserEmail"),"@")
        Session("ADUserName") = arr(0)


        Dim GetPrivilegeLevelConn
        Set GetPrivilegeLevelConn = Server.CreateObject("ADODB.Connection")
        GetPrivilegeLevelConn.ConnectionString="CONNECTIONSTRING"
        GetPrivilegeLevelConn.Open

        Dim GetPrivilegeLevelsql,objGetPrivilegeLevel

        GetPrivilegeLevelsql = "SELECT * FROM EFP_SITE_PRIVILEGE_MEMBERS WHERE PrivilegeUserID = '" & arr(0) & "';"

        Set objGetPrivilegeLevel = GetPrivilegeLevelConn.Execute(GetPrivilegeLevelsql)

        if objGetPrivilegeLevel.bof or objGetPrivilegeLevel.eof then

          AuthenticateUser = false
          EnrollRequestUser = true
          Session("EnrollRequestUser") = "true"
          Session("tmpstrUserName") = Session("ADUserName")
          Response.Redirect "index.asp?EnrollRequestUser=yes"
        
        else

          Session("EFPPrivilegeLevel") = objGetPrivilegeLevel("PrivilegeLevelID")
          Session("EFPPrivilegeName") = objGetPrivilegeLevel("PrivilegeLevelName")

          AuthenticateUser = true
          Session("UserIsAuthenticated") = "true"

          
          Set InsertToEFPLog = Server.CreateObject("ADODB.Connection")
          InsertToEFPLog.ConnectionString="CONNECTIONSTRING"
          InsertToEFPLog.Open

          InsertToEFPLogsql = "INSERT INTO EFP_LOG (DataString,ADdisplayName) VALUES ('" & Session("ADUserEmail") & " loggede på;','" & arr(0) & "','" & arr(0) & "');"

          Set InsertToEFPlogobj = InsertToEFPLog.Execute(InsertToEFPLogsql)
          InsertToEFPLog.Close
          Set InsertToGEFPLog = nothing

          response.Write InsertToEFPLogsql
          Response.End

          Response.Redirect "index.asp"

          set objGetPrivilegeLevel = nothing
          set GetPrivilegeLevelConn = nothing 

          end if

    end if
    set oRS = nothing
    set oConn = nothing

    END IF
%>

更新!!!

我尝试添加一个认的 HTML 模板,并添加了 ASP 代码和一些普通文本.. 结果是 ASP 没有返回正确的编码,但 HTML 返回了..

代码

<% 
  Response.CodePage = 65001
  Response.ContentType = "text/html"
  response.addheader "Content-Type","text/html;charset=UTF-8"
  Response.CharSet = "UTF-8"
%>


<!doctype html>
<html lang="en">
  <head>
    <Meta charset="utf-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1">

    <title>Hello,world!</title>
  </head>
  <body>

  <% Response.Write "The Session code page is " & Session.CodePage & "<BR>" %>
  <% Response.Write "The Response code page is " & Response.CodePage & "<BR>"  %>
  <% Response.Write "The Response Charset is " & Response.CharSet & "<BR>" %>
  <% Response.Write "<br>" %>
  <% Response.Write "Page with æ ø å" %>
<br>
<br>Hej æ ø å

  </body>
</html>
<% Response.End %>

返回:

The Session code page is 65001
The Response code page is 65001
The Response Charset is UTF-8

Page with æ ø å

Hej æ ø å

新更新

@user692942 实际上通过指向 this article链接将其钉在了上面。为我修复它的实际上是将所有字符集和代码页更改为:

<%@Language="VBScript" CodePage = 65001 %>

<% 
Response.CharSet = "UTF-8"

谢谢@user692942! :-)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)