【问题标题】:convert utf-8 to iso-8859-1 in classic asp在经典 asp 中将 utf-8 转换为 iso-8859-1
【发布时间】:2013-07-16 12:59:08
【问题描述】:

我的网站现在完全使用 UTF-8,但为了使用 serverXMLHTTP 发送 SMS,我需要在发送之前将我的消息从 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>

然后是 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 ÆØÅ

有什么想法吗?

【问题讨论】:

    标签: asp-classic character-encoding ado serverxmlhttp


    【解决方案1】:

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

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

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

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

    • ASP 页面期望作为什么 CodePage 被处理? (&lt;%@ CodePage %&gt; 属性)

    您可以在测试页面中使用下面的代码 sn-p 来计算您的服务器默认设置是什么;

    <%
    '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
    %>
    

    【讨论】:

    • 您可能是对的,但是在我的现实世界问题中,b.asp 代表 SMS 提供商,我不知道他的角色如何。只是他必须接收编码为 ISO-8859-1 的消息。同时,我制定了一个小 sn-p(见下文),可能会解决我的问题。
    • 我认为 b.asp 是您的消息和短信发送机制之间的中间人。您仍然可以使用该方法让服务器为您将 UTF-8 编码转换为 ISO-8859-1,然后使用 ServerXmlHttp 发送到您的 SMS 提供商。
    • 案例关闭:我在发送数据之前添加了两行 ...charset="ISO-8859.1" 和 ...codepage=28591,然后在恢复为“UTF-8”和 65001 后立即添加为了让我的基于 UTF-8 的页面正确地呈现一些特殊字符
    • ASP 似乎能够解析 65001 而无需在声明中指定它。
    • @IanWarburton 是的,它可以,但这意味着你做了很多假设,我试图帮助人们理解这个问题。
    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2014-08-29
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多