Конвертировать 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
%>