提问人:RedsDevils 提问时间:12/7/2009 最后编辑:p.campbellRedsDevils 更新时间:2/14/2015 访问量:28593
经典ASP:如何在经典ASP中编写unicode字符串数据?
Classic ASP: How to write unicode string data in classic ASP?
问:
如何在经典 ASP 网页中显示存储 unicode 数据(使用 zawgyi1 字体输入)的 nvarchar 列?
当我检索值并将其写入页面时,它显示“?????”。我使用以下元标记将 ASP 页面的内容类型设置为 UTF-8:
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
不幸的是,文本仍然呈现为“?????”。
关于如何在经典 ASP 页中显示 unicode 值的任何建议或想法?
答:
页面顶部的代码页定义呢?
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
评论
Content-Type 元标头通知浏览器将发送的内容视为 UTF-8 编码的文本流。它不能确保发送的流实际上是 UTF-8。要正确处理 UTF-8,您需要做 3 件事:-
- 确保您的静态内容以兼容 UTF-8 的编码保存。
- 确保您的动态内容编码为 UTF-8。
- 通知客户端内容是 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.CodePage
CODEPAGE=65001
<%@ %>
Response.Write
第 3 项要求标头包含限定符。正如您已经这样做的那样,您可以使用 META 标头执行此操作。就我个人而言,我发现这有点笨拙,我更喜欢在代码中使用。这会将限定符放在真正的 HTTP 标头上。Content-Type
charset=UTF-8
Response.Charset = "UTF-8"
Content-Type
评论
下面是一个有用的脚本,用于将 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>
评论