【问题标题】:Classic ASP: How to write unicode string data in classic ASP?经典 ASP:如何在经典 ASP 中编写 unicode 字符串数据?
【发布时间】:2010-12-23 19:07:07
【问题描述】:

如何在经典 ASP 网页中显示存储 unicode 数据(使用 zawgyi1 字体输入)的 nvarchar 列?

当我检索该值并将其写入页面时,它显示“?????”。我使用以下元标记将我的 ASP 页面的内容类型设置为 UTF-8:

<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

很遗憾,文本仍然呈现为“?????”。

关于如何在经典 ASP 页面中显示 unicode 值有什么建议或想法吗?

【问题讨论】:

    标签: unicode asp-classic utf-8


    【解决方案1】:

    页面顶部的代码页定义怎么样?

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

    【讨论】:

    • 非常感谢!这个对我有用。我只是在我的页面上添加该脚本。非常感谢!我不能立即回复,因为那几天我不能上网。谢谢。
    • 对 5 年前回答的问题获得赞成票是不是很有趣。
    【解决方案2】:

    Content-Type 元标头通知浏览器将发送的内容视为 UTF-8 编码的文本流。它不能确保发送的流实际上是 UTF-8。要正确处理 UTF-8,您需要做 3 件事:-

    1. 确保您的静态内容以兼容 UTF-8 的编码保存。
    2. 确保您的动态内容编码为 UTF-8。
    3. 通知客户端内容是 UTF-8 编码的。

    第 1 项 要求您将 ASP 文件实际保存为 UTF-8 编码文件,或者文件中的所有静态内容都在 ASCII 字符范围 (0-127) 内。请注意,如果您保存为 UTF-8,则所有服务器端脚本都必须使用 ASCII 字符范围内的字符。在 Visual Studio 中,您可以通过“将文件另存为...”然后单击“保存”按钮上的小箭头来实现。

    第 2 项 要求将 Response.CodePage 属性设置为 UTF-8 代码页 65001,您可以在代码中或通过将属性 CODEPAGE=65001 添加到 &lt;%@ %&gt; 声明来执行此操作在 ASP 文件的第一行。如果您在代码中执行此操作,则必须在对 Response.Write 的任何调用之前设置它。 AND:不要使用 chr 或 asc 函数(这些在使用 65001 时有问题),而是使用 chrw 和 ascw。

    第 3 项 要求 Content-Type 标头包含 charset=UTF-8 限定符。正如您已经在做的那样,您可以使用 META 标头执行此操作。就我个人而言,我觉得这有点笨拙,我更喜欢在代码中使用Response.Charset = "UTF-8"。这会将限定符放在真正的 Content-Type HTTP 标头上。

    【讨论】:

    • 感谢 AnthonyWJones 您的 Item2 解决了我的问题。谢谢!
    • 在我们的网站上,即使我们在 html 中添加了元元素,我仍然必须添加 Response.Charset,谢谢 Anythony。
    【解决方案3】:

    这是一个将 ASP 文件从 ANSI 批量转换为 UTF-8 编码的有用脚本:

    <HTML>
    <HEAD>
    <TITLE>ASP UTF-8 Converter - TFI 13/02/2015</TITLE>
    </HEAD>
    <BODY style='font-face:arial;font-size:11px'>
    <%
    Dim fso, folder, files, NewsFile, sFolder, objFSO, strFileIn, strFileOut
    Set fso = CreateObject("Scripting.FileSystemObject")
    sFolder = "C:\inetpub\wwwroot\sitefolder"
    
    Function ANSItoUTF8( ANSIFile)
       UFT8FileOut=ANSIFile&".utf8" 
       Set oFS    = CreateObject( "Scripting.FileSystemObject" )
       Set oFrom  = CreateObject( "ADODB.Stream" )
       sFFSpec    = oFS.GetAbsolutePathName(ANSIFile)
       Set oTo    = CreateObject( "ADODB.Stream" )
       sTFSpec    = oFS.GetAbsolutePathName(UFT8FileOut)
       oFrom.Type    = 2 'adTypeText
       oFrom.Charset = "Windows-1252"
       oFrom.Open
       oFrom.LoadFromFile sFFSpec
       oTo.Type    = 2 'adTypeText
       oTo.Charset = "utf-8"
       oTo.Open
       oTo.WriteText oFrom.ReadText
       oTo.SaveToFile sTFSpec,2
       oFrom.Close
       oTo.Close
       oFS.DeleteFile sFFSpec
       oFS.MoveFile sTFSpec,sFFSpec
    End Function
    
    ConvertFiles fso.GetFolder(sFolder), True
    
    Function ConvertFiles(objFolder, bRecursive)
        Dim objFile, objSubFolder
        For each objFile in objFolder.Files
            If Ucase(fso.GetExtensionName(objFile)) = "ASP" Then
                ANSItoUTF8 objFile.path
                response.write "&bull; Converted <B>"&fso.GetAbsolutePathName(objFile)&"</B> from ANSI to UTF-8<BR>"
            End If
        Next
    
        If bRecursive = true then
            For each objSubFolder in objFolder.Subfolders
                ConvertFiles objSubFolder, true
            Next
        End If
    End Function
    
    %>
    </BODY>
    </HTML>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多