Utf 8 经典ASP包含文件的字符集

Utf 8 经典ASP包含文件的字符集,utf-8,vbscript,asp-classic,Utf 8,Vbscript,Asp Classic,我们发现了一个问题,UTF-8包含文件导致它所包含的ANSI文件变成UTF-8 是否有任何理由将include文件设置为UTF-8,或者可以安全地将其更改为ANSI 当我尝试更改它时,没有任何明显的损坏,但是include文件包含与web服务交互相关的函数 I包含包含文件的代码: <% Function GetQuotedUrl(ByVal value) GetQuotedUrl = Chr(34) & value & Chr(34) End Function

我们发现了一个问题,UTF-8包含文件导致它所包含的ANSI文件变成UTF-8

是否有任何理由将include文件设置为UTF-8,或者可以安全地将其更改为ANSI

当我尝试更改它时,没有任何明显的损坏,但是include文件包含与web服务交互相关的函数

I包含包含文件的代码:

<%   
Function GetQuotedUrl(ByVal value)
    GetQuotedUrl = Chr(34) & value & Chr(34)
End Function

Function GetServiceResponse(ByVal paramArr,ByVal methodName)

    dim soapMessage
    dim responseMessage

    soapMessage=CreateSOAPMessage(paramArr,methodName)      
    soapMessage = Replace(soapMessage, "'", chr(34))

    Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")                                  
    xmlhttp.open "POST", SERVICE_URL , False
    xmlhttp.setTimeouts 30000, 60000, 30000, 120000
    xmlhttp.setRequestHeader "Man", POST & " " & SERVICE_URL & " HTTP/1.1"
    xmlhttp.setRequestHeader "SOAPAction", "http://tempuri.org/" &  SERVICE_CONTRACT & "/" & methodName
    xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"

    xmlhttp.send(soapMessage)
    responseMessage=xmlhttp.responseText        
    GetServiceResponse=responseMessage

End Function

Function CreateSOAPMessage(ByVal paramArr,ByVal methodName)

    dim soapMessage
    dim param
    dim paramName,paramValue
    dim paramNameValue

    For count=0 to UBound(paramArr)-1
      paramNameValue=Split(paramArr(count),"=")
      param = param & "<" & paramNameValue(0) & ">" & paramNameValue(1) & "</" & paramNameValue(0) & ">"
    Next

    soapMessage = "<s:Envelope xmlns:s=" & GetQuotedUrl("http://schemas.xmlsoap.org/soap/envelope/") & ">" & _ 
                    "<s:Body>" & _ 
                        "<" & methodName & " xmlns=" & GetQuotedUrl("http://tempuri.org/") & ">" & param & "</" & methodName & ">" & _
                    "</s:Body>" & _
                "</s:Envelope>"

   CreateSOAPMessage=soapMessage          

End Function       
%>


文件中似乎没有任何字符超出7位ASCII范围,并且由于ANSI和UTF-8在此字符范围内共享相同的定义,因此这应该不会是问题。您可能会遇到一些困难,如果您的文件中甚至包含像欧元符号、“卷曲”引号或em破折号这样无辜的字符。ANSI和UTF-8之间,这些字符从值到标志符号的映射是不同的,因此您不能简单地说“文件是ANSI”就可以忽略它。

我在这个文件中没有看到任何UTF-8符号,这意味着它使用的子集对两者都是相同的(UTF/ASCII),因此没有区别,无论如何,我建议您在header
中使用编码声明,您不应该使编码不匹配,这只会导致您花费大量时间试图跟踪的问题。如果源
asp
文件是
UTF-8
,则任何
#include
文件也应该是
UTF-8
,反之亦然。请看,该文件不太可能是实际的7位ASCII,更可能是像Windows-1252那样的扩展ASCII 8位字符集,因此并非所有字符都会像这样映射,简单地说,不要混合编码,它永远不会有好的结局。看,但问题是关于这个特定的文件,我的答案是关于这个特定的文件。文件没有固有的编码。如果一个特定文件中的字符恰好分为两种编码,那么您可以声明它是其中之一。OP不会是“混合编码”,因为同样,文件没有固有编码。如果文件有继承编码,它们将确定文件中二进制文件的结构。如果您尝试在没有正确编码的情况下打开文件,最终将导致编码不匹配,我不确定是否理解您的推理。ASCII和UTF-8确实共享一些相同的范围,因此理论上你可以安全地在UTF-8中显示ASCII,但是如果你试图改变这种情况,你会感到非常痛苦。我的观点是:如果一个文件(比如OP引用的文件)只包含由“7位ASCII”定义的字符(his是这样做的),那么可以安全地说该文件使用ANSI编码(这就是他想做的)。之所以这样做,是因为尽管你提出了相反的要求,但文件没有某种隐藏的编码属性,这会让他大吃一惊。他可以将此文件称为Windows 1252、ANSI、UTF-8或ASCII(7位或8位)结果是一样的。当然不是每个文件都是这样,只有这一个。这就是问题所在,所以答案是肯定的。哇,大写@craig的用法很有趣。你的观点是有缺陷的,因为你仍然在对动态生成的文件进行假设。你可以随心所欲地论证这一点,但mi没有任何好处smatching编码。如果其中一个方法名称包含与ASCII编码不匹配的字符,则会发生什么情况?您将在响应XML中得到损坏的数据?