zoukankan      html  css  js  c++  java
  • [asp.net]控制ajax接收数据的编码格式和避免乱码的方法

    情况是这样的:很久以前写过一个ajax应用,使用的YUI框架,一直用着没问题,偶尔有用户反映不行,当时简单的归结为RP问题,因为一样的系统,一样版本的浏览器,为什么单单你不行呢?没有深究,可最近,自己遭遇了这种RP问题。问题出在安装了vs2010 express中文版之后,原先的IE6访问该应用时显示乱码。可是用户一个都没反映有问题。Google后没有找到答案,只好自己研究。

    首先想到的是编码格式的问题,调试发现在服务器端输出的json数据没有任何乱码,可一到浏览器端中文就会乱掉。检查web.config。发现配置了请求响应的编码格式:

     <globalization requestEncoding="gb2312" responseEncoding="gb2312"/>

    大家都知道UTF8才是统一的编码格式,并且是默认格式。然而由于某种原因(要从团队其他成员做的gb2312的页面给我传值),为了图省事,改成了gb2312。建议大家不要用gb2312了,有了utf8,gb2312根本没有用武之地,只会增加出现乱码的情况。其实当初的图省事儿是没有必要的,因为只要在需要接收数据的aspx页面设一下请求的编码格式,就能正确的解码了:

    Request.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");

    上面的不管用?使用:

     public void Application_BeginRequest(object sender, EventArgs args)
        {
    //根据地址选择编码格式,适合于混合两种编码的情况
            Request.ContentEncoding = Encoding.GetEncoding(inputEncoding);
        }

    指出请求的页面编码是gb2312,请不要再用默认的utf-8解码了。完全不用设置这种全局 globalization。

    言归正传,我的ajax应用为什么会出现乱码呢?我想是javascript对gb2312的支持不够智能造成的,javascript对UTF-8的支持应该是比gb2312好。如果由于某种原因,例如可能是安装了某一软件,改变了某些底层的东西,会导致gb2312编码js无法正确解释,而UTF-8却完全不用担心RP问题的出现。

    如果继续图省事,也可以在返回json数据之前,设置成UTF8编码:

    Response.ContentEncoding = Encoding.UTF8;

    这样你的Ajax应用也不会出现乱码了。

    避免乱码的方法就是整个网站,或者至少是你的团队都用一种编码格式,那就是Utf-8。导致乱码的原因就是编码不一致造成的

    IE中随便打开一个网站,你会发现网页编码都是utf-8:

    查看源代码,你会发现:

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    如果从其它网页导航到你的aspx后,出现了乱码,通常是url传值时(cookie不知道会不会乱),此时不要随便更改你的globalization,如果这样你就被传染了,而是设置Request的ContentEncoding。


    自言自语:有些人就是幸运,可能一辈子都不会遇到这种事,而有些人可能注定不幸,经常遭遇RP问题,我想我可能是后一种人,于是才有了这篇儿。
    昨天写了这篇:[Asp.net]更新全局程序集缓存的注意事项。没敢发到首页,结果访问量至今为0。

    提供Silverlight打印全套解决方案全部源代码--支持打印预览、页面设置(横向纵向,页边距,纸张大小、字体大小)、自动分页和多页连续打印

  • 相关阅读:
    如何修改dmesg log buffer size
    phpmyadmin的初始账号密码是多少
    DirectFB 之 FillRectangle 绘制矩形
    DFB系列 之 Clear清空surface缓存
    DFB系列 之 Flip()更新buffe
    DFB系列 之 Bilp叠加
    DFB系列 之 SetCooperativeLevel协作级别
    DirectFB 之 实例图像不断右移
    DirectFB 之 环境配置
    DirectFB 之 简介
  • 原文地址:https://www.cnblogs.com/slmk/p/2258356.html
Copyright © 2011-2022 走看看