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

时间:2009-12-06 19:03:01

标签: unicode asp-classic utf-8

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

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

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

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

有关如何在传统ASP页面中显示unicode值的任何建议或想法?

3 个答案:

答案 0 :(得分:16)

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

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

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

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

答案 1 :(得分:15)

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

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

答案 2 :(得分:0)

这是一个将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>