none
Default encoding and website problem RRS feed

  • 问题

  • 我刚申请了试用,但很显然Azure的服务器是英文版的,导致一些classic asp的程序没法正常运行。

    配置了web.config设置一些encoding到中文后,日期格式等问题是解决了,但仍然无法处理request.querystring直接传入中文的问题。

    我配的web.config

    <?xml version="1.0"?>
    <configuration>
        <system.web>
            <globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" />
        </system.web>
      <system.webServer>
        <asp enableParentPaths="true"
        scriptErrorSentToBrowser="false" codePage="936" lcid="2052">
        </asp>
        <urlCompression doStaticCompression="false" doDynamicCompression="false" />
      </system.webServer>
    </configuration>

    ------------

    一个非常简单的测试通不过,其他页面无法继续测试了。

    NOTE: it's classic asp, not asp.net

    <%
    response.write request.querystring("userid")
    response.write "<br>中文输出" & now
    %>

    比如我传 testEncode.asp?userid=大风歌1

    在我自己的server是OK的,在我dev的机器也是OK的,但到了Azure的网站是不正常的。Azure的输出是

    麓贸路莽赂猫1
    中文输出2015/1/4 13:24:40

    ---------------

    有什么解决方案吗,要不就放弃了,千万别说要我encodingUrl。。。。这个我知道,但是我们没计划去修改已经运行很稳定的一大堆程序。

    Thanks in advance.

    2015年1月4日 13:38

答案

全部回复

  • Hi,

    你使用的是中国版的Azure吧,我分别在中国版和国际版本上做了测试,在没有配置web.config的情况下,页面均能正常输出,我是在asp.net环境中尝试的,稍后我试试在asp中的情况。

    Best Regards,

    Jambor


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年1月5日 3:25
    版主
  • 谢谢,asp.net那个应没问题的,因为默认后台都是utf8编码。但asp有较大问题,一般它都是用default encoding保存文件,在英文版下就是ascii中文版就是gb2312,而且现在问题是website一旦出现错误也是乱码。对于我们developer来说,知道切换到utf8看错误信息,但最终用户就没办法了。

    比如访问一个不存在的页面,后台iis8是用utf8输出错误的,在ie/firefox浏览器测试,都是乱码

    鎮ㄨ鎵剧殑璧勬簮宸茶鍒犻櫎銆佸凡鏇村悕鎴栨殏鏃朵笉鍙敤銆

    其实是

    您要找的资源已被删除、已更名或暂时不可用。

    2015年1月5日 13:26
  • Hi,

    你使用的是中国版的Azure吧,我分别在中国版和国际版本上做了测试,在没有配置web.config的情况下,页面均能正常输出,我是在asp.net环境中尝试的,稍后我试试在asp中的情况。

    Best Regards,

    Jambor




    是中文版,  www dot windowsazure dot cn上申请的,Ping出来的IP是42.159.132.179(北京电信),但是有问题,时差8小时(比如可以用response.write now看到),系统环境貌似英文的。。
    2015年1月5日 13:35
  • 您好 youka945,

    根据您的描述, 如果您不想使用Server.UrlEncode方法来安全传递中文值, 您也可以考虑在传值之前设置Session.CodePage值, 以使传递的中文正常显示在下一个页面, 比如

    <%
    Session.CodePage=936
    Response.Redirect("PageName.asp?userid=中文")
    %>

    下一个页面
    <%
    Session.CodePage=65001
    response.write request.querystring("userid")
     %>

    以下是我本地测试的截图:

    类似这边提到的解决方案: http://www.96kb.com/tech/asp/2227.html. 当然, 您也可以考虑使用Include形式把这些重复的代码加入到您的asp页面中.

    根据我的经验, 还是建议您选择使用Server.UrlEncode, 最好不直接使用没有encode的中文字符作为URL参数, 以便浏览器兼容: http://blogs.msdn.com/b/ieinternals/archive/2014/04/22/internet-explorer-11-unicode-utf8-url-query-string-international.aspx

      >> 但是有问题,时差8小时(比如可以用response.write now看到),系统环境貌似英文的。。

    建议从代码级别获取您要的时区时间, 而非直接修改VM 服务器的时间, 这里的类似讨论提供了相应的解决方案: http://stackoverflow.com/questions/12813123/how-to-change-default-time-zone-in-azure-website-service.

      >> 有什么解决方案吗,要不就放弃了,千万别说要我encodingUrl。。。。这个我知道,但是我们没计划去修改已经运行很稳定的一大堆程序。

    另外, 我想指出, 如果您使用Azure VM, 您可以选择使用/安装中文操作系统的Server:

    或者把您当地的Server Image上传到Azure, 使Azure VM和您开发(或者当前部署的Server)拥有相同的环境, 具体请参考: http://www.windowsazure.cn/zh-cn/documentation/articles/virtual-machines-create-upload-vhd-windows-server/

    同时欢迎您提出您的宝贵意见和想法: http://www.windowsazure.cn/zh-cn/support/support-ticket-form/?l=zh-cn

    Best Regards,

    Ming Xu


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 youka945 2015年1月7日 10:15
    2015年1月6日 16:57
    版主
  • 已标记为答复,但我测试并未通过,因为是非常老的传统asp,本身并不具备太多技术价值了,不准备再做其他测试了。非常感谢你的反馈。

        Session.CodePage=936
        response.redirect "testEncode.asp?userid=测试"

    娴嬭瘯

    2015年1月7日 10:18
  • 您好 youka945,

    不客气. 如果您有时间, 可以看看在testEncode.asp (如果该页面也是UTF-8编码) 页面最开始加上

    Session.CodePage=65001

    应该能正常获取到上一个页面传来的中文值. 

    我这边有个部署在Azure Website上的例子供您测试: http://chinaword.chinacloudsites.cn/home.asp (进入后会由代码Redirect到Index.asp页面)

    <%
    Session.CodePage=936
    Response.Redirect("index.asp?userid=中文")
    %>

    不过如果您用的是IE, 正如这边指出的http://blogs.msdn.com/b/ieinternals/archive/2014/04/22/internet-explorer-11-unicode-utf8-url-query-string-international.aspx, 在浏览器的地址栏中的URL不能正确显示, 页面中获取值没有问题: 

    使用其他浏览器没有问题, 比如:

    因此, 还是建议您选择使用Server.UrlEncode, 最好不直接使用没有encode的中文字符作为URL参数, 以便浏览器兼容. 使用Azure VM也是一种不错的选择.

    如果您之后遇到任何Azure相关的疑问, 欢迎您再次在论坛中提问.

    Best Regards,

    Ming Xu


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年1月7日 15:30
    版主
  • 老的asp, 升级一下, 用asp.net安全又省心了, Azure网站直接部署没遇到问题
    2015年1月7日 15:35
  • 首先 你的程序第一行应该有

    <%@language="VBSCRIPT" CodePage="936"%>

    gb2312 是 936  utf-8 是65001

    这用来确定你使用的默认语言,以及输出内容的编码

    在然后就是浏览器了, 正常来说url中不应该存在中文,首先应该对其进行 Server.URLEncode   ,但是直接进行传中文也是可以得,但是你不能从浏览器的地址栏里输入中文,因为{如果你这样做,连你自己也不知道你发送的内容是什么,浏览器发送的是可能是utf-8的中文,也可能是 本地语言 的中文,这对中国地区而言就是 gbk 或gb2312了}

    所以所有的链接只能从你生成的页面上访问


    2015年1月8日 1:55