Конвертировать UTF-8 в ISO-8859-1 в классическом ASP

Мой сайт теперь работает исключительно в UTF-8, но для отправки SMS с использованием serverXMLHTTP мне нужно преобразовать свое сообщение из UTF-8 в ISO-8859-1 перед его отправкой.

Ситуация параллельна этому:

a.asp:

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body>
<form method="post" action="b.asp">
<input type text name="message" value="æøå and ÆØÅ"><br>
<input type=submit>
</body>

а затем б.асп

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head><body>
<%=konvert(request("message"))%><br>
</body>
<%
Function Konvert(sIn)
    Dim oIn : Set oIn = CreateObject("ADODB.Stream")
    oIn.Open
    oIn.CharSet = "UTF-8" 
    oIn.WriteText sIn
    oIn.Position = 0
    oIn.CharSet = "ISO-8859-1"
    Konvert = oIn.ReadText
    oIn.Close
End Function
%>

В этой витрине я ожидаю увидеть ту же строку в b.asp, что и при отправке i a.asp, но что я получу в этом:

æøå and ÆØÅ

Есть идеи?

1 ответ

Решение

Вы обрабатываете кодирование на стороне клиента, но не на стороне сервера

Это действительно зависит от конфигурации вашего сервера относительно того, как ASP обрабатывает запросы к серверу.

Есть две части, чтобы иметь дело с тем, как IIS кодирует ответы;

  • Что такое физический файл (b.asp), закодированный как (UTF-8, Windows-1252, Western European (ISO) так далее). Пока обработка CodePage соответствует файлу ASP, это не должно вызывать проблем (лично я предпочитаю использовать UTF-8, а в более новых версиях IIS это по умолчанию).

  • Какую кодовую страницу ожидает обработка страницы ASP? (<%@ CodePage %> атрибут)

Вы можете использовать фрагмент кода ниже на тестовой странице, чтобы выяснить, каковы настройки вашего сервера по умолчанию;

<%
'Check how the server is currently encoding responses.

Call Response.Write(Response.Charset)
Call Response.Write(Response.CodePage)
%>

Для корректной работы приведенного ниже примера b.asp необходимо сохранить как 65001 (UTF-8), если вы используете Visual Studio, это можно сделать с помощью диалогового окна "Дополнительные параметры сохранения" (по умолчанию не отображается в меню быть добавленным с помощью параметров меню "Настройка").

<%@Language="VBScript" CodePage = 65001 %>
<% 
'IIS should process this page as 65001 (UTF-8), responses should be 
'treated as 28591 (ISO-8859-1).

Response.CharSet = "ISO-8859-1"
Response.CodePage = 28591
%>
Другие вопросы по тегам