经典 ASP:使用字符集 UTF-16 发出响应

Classic ASP: Emit Response with charset UTF-16

我需要在经典中做一个脚本ASP来生成一个CSV文件供用户下载。它需要以 "classic Windows Unicode" 编码,即 UTF-16。

我试过这个:

  Response.Clear
  Response.ContentType = "text/csv"
  Response.Charset = "utf-16"
  Response.Codepage = 1200
  Response.AddHeader "Content-Disposition", "attachment; filename=export.csv"

但我收到错误

ERROR -2147467259: 006~ASP 0204~Invalid CodePage Value~An invalid CodePage value was specified.

这是有道理的,因为根据文档,代码页 1200 仅适用于托管 (ASP.NET) 应用程序。

但是,如何将 Response 的字符集设置为 UTF-16?

嗯,我用ADODB.Stream“解决”了它。这样做的缺点是我需要在将其发送给用户之前在内存中累积完整的输出。基本上,

dim s
set s = Server.CreateObject("ADODB.Stream")
s.Type = 2  ' text '
s.Open
do while <getting data>
  s.WriteText <data>
loop
s.Flush
s.Position = 1
s.Type = 1   ' binary '

Response.Clear
Response.ContentType = "application/csv"
Response.AddHeader "Content-Disposition", "attachment; filename=export.csv"

Response.BinaryWrite s.Read

这利用了 ADODB.Stream 默认使用 Unicode 来存储文本的事实。