4

我的网站现在完全使用 UTF-8,但是为了使用 serverXMLHTTP 发送 SMS,我需要在发送之前将我的消息从 UTF-8 转换为 ISO-8859-1。

情况与此平行:

一个.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>

然后是 b.asp

<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 中看到与我发送 a.asp 相同的字符串,但我得到的是:

æøå and ÆØÅ

有任何想法吗?

4

1 回答 1

7

您处理客户端编码而不是服务器端

ASP 如何处理服务器请求实际上取决于您的服务器配置。

处理 IIS 如何编码响应有两个部分;

  • 编码为 ( , 等) 的物理文件 (b.asp)UTF-8Windows-1252什么Western European (ISO)。只要处理 CodePage 与 ASP 文件匹配,这应该不是问题(我个人更喜欢使用 UTF-8,在较新的 IIS 版本中这是默认设置)。

  • ASP 页期望作为什么 CodePage 被处理?(<%@ 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
%>
于 2013-07-16T15:36:15.790 回答