经典ASP:如何在经典ASP中编写unicode字符串数据?

Classic ASP: How to write unicode string data in classic ASP?

提问人:RedsDevils 提问时间:12/7/2009 最后编辑:p.campbellRedsDevils 更新时间:2/14/2015 访问量:28593

问:

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

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

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

不幸的是,文本仍然呈现为“?????”。

关于如何在经典 ASP 页中显示 unicode 值的任何建议或想法?

Unicode ASP-经典 UTF-8

评论


答:

16赞 jammus 12/7/2009 #1

页面顶部的代码页定义呢?

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

评论

0赞 RedsDevils 12/9/2009
多谢!它对我有用。我只是在我的页面上添加该脚本。多谢!我不能立即回复,因为那天我不能在线。谢谢。
0赞 BenCr 2/11/2015
当你对你 5 年前回答的问题投赞成票时,这不是很有趣吗?
17赞 AnthonyWJones 12/7/2009 #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 项要求将该属性设置为 UTF-8 代码页 65001,可以在代码中执行此操作,也可以通过将该属性添加到 ASP 文件第一行的声明中来执行此操作。如果在代码中执行此操作,则必须在调用 之前设置它。 AND:不要使用 chr 或 asc 函数(使用 65001 时这些函数有问题),而是使用 chrw 和 ascw 代替。Response.CodePageCODEPAGE=65001<%@ %>Response.Write

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

评论

0赞 RedsDevils 12/9/2009
谢谢 AnthonyWJones 您的 Item2 解决了我的问题。谢谢!
0赞 svandragt 4/30/2010
在我们的网站上,即使我们在 html 中添加了元元素,我仍然必须添加 Response.Charset,谢谢 Anythony。
0赞 Niente3 2/14/2015 #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>