2

Мне нужно сделать сценарий в классическом ASP для создания CSV-файла для загрузки пользователем. Он должен быть закодирован в «классическом Windows Unicode», то есть UTF-16.Классический ASP: Emit Response с charset UTF-16

Я попытался это:

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

, но я получаю ошибку

ОШИБКА -2147467259: 006 ~ ASP 0204 ~ Недопустимая CodePage Значение ~ было задано недопустимое значение CodePage.

, что имеет смысл, поскольку в соответствии с документацией кодовая страница 1200 доступна только для управляемых приложений (ASP.NET).

Но тогда, как я могу установить кодировку Response в UTF-16?

+1

Вы, похоже, знаете, что это может быть не актуально, но я не думаю, что вы можете получить ASP для поддержки UTF-16 (см. Обновление по [этому вопросу] (http://stackoverflow.com/a/25646123/692942)). Извините за то, что я являюсь носителем плохих новостей. – Lankymart

+0

@ Lankymart Спасибо, это слишком плохо. Считаете ли вы, что можно достичь этого, используя поток и Response.BinaryWrite, или что-то в этом роде? – angus

+0

Чтобы быть честным @angus, было бы проще написать COM-компонент, чтобы сделать это чем-то вроде .Net, затем вызвать его из ASP или попытаться получить требование принять UTF-8 вместо этого. Удачи, хотя, извините, что это не очень помогает. – Lankymart

ответ

0

Ну, я «решил» его, используя 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 по умолчанию для хранения текста.

Смежные вопросы