如何在经典ASP网页中显示存储unicode数据(使用zawgyi1字体输入)的nvarchar列?
当我检索并将值写入页面时,它显示“?????”。我使用以下元标记设置我的ASP页面的UTF-8内容类型:
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
不幸的是,文本仍然呈现为“?????”。
有关如何在传统ASP页面中显示unicode值的任何建议或想法?
答案 0 :(得分:16)
Content-Type元标题通知浏览器将发送的内容视为UTF-8编码的文本流。它不能确保发送的流实际上是UTF-8。要正确处理UTF-8,您需要做三件事: -
第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 "• 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>