• ASP.NET 返回字符串 IE6乱码问题


    项目A,所有的文件编码和内容编码都是UTF-8。

    项目B,Index.aspx文件编码和页面内容编码都是GB2312。

    项目A返回JSON格式数据给项目B时,其它浏览器都可以就是IE不行。后来在网上找了下资料,解决了。特此记录,以备后用。

    项目A,服务端,如下:

    modelUser.UserRealName = System.Web.HttpUtility.UrlEncode(modelUser.UserRealName, System.Text.Encoding.UTF8);  

    项目B,对返回的数据进行解码,如下:

    decode(data[0]["UserRealName"])
    /****************************************************************************************************************/
    /*Url解码     System.Web.HttpUtility.UrlEncode(modelUser.UserRealName, System.Text.Encoding.UTF8);***************/
    /****************************************************************************************************************/
    function decode(zipStr) {
        var uzipStr = "";
        for (var i = 0; i < zipStr.length; i++) {
            var chr = zipStr.charAt(i);
            if (chr == "+") {
                uzipStr += " ";
            } else if (chr == "%") {
                var asc = zipStr.substring(i + 1, i + 3);
                if (parseInt("0x" + asc) > 0x7f) {
                    uzipStr += decodeURI("%" + asc.toString() + zipStr.substring(i + 3, i + 9).toString()); ;
                    i += 8;
                } else {
                    uzipStr += AsciiToString(parseInt("0x" + asc));
                    i += 2;
                }
            } else {
                uzipStr += chr;
            }
        }
        return uzipStr;
    }
    
    function StringToAscii(str) {
        return str.charCodeAt(0).toString(16);
    }
    
    function AsciiToString(asccode) {
        return String.fromCharCode(asccode);
    }
    
    function encode(unzipStr) {
        var zipstr = "";
        var strSpecial = "!"#$%&'()*+,/:;<=>?[]^`{|}~%";
        var tt = "";
        for (var i = 0; i < unzipStr.length; i++) {
            var chr = unzipStr.charAt(i);
            var c = StringToAscii(chr);
            tt += chr + ":" + c + "n";
            if (parseInt("0x" + c) > 0x7f) {
                zipstr += encodeURI(unzipStr.substr(i, 1));
            } else {
                if (chr == " ")
                    zipstr += "+";
                else if (strSpecial.indexOf(chr) != -1)
                    zipstr += "%" + c.toString(16);
                else
                    zipstr += chr;
            }
        }
        return zipstr;
    }
    /****************************************************************************************************************/

     问题虽然解决了,但是感觉不妥,旁边有个小伙子技术还可以,问了下,就加了以下代码就解决了:

    context.Response.ContentEncoding = Encoding.GetEncoding("GB2312");
  • 相关阅读:
    C++11 并发指南三(Lock 详解)
    C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
    C++11 并发指南六(atomic 类型详解三 std::atomic (续))
    C++11 并发指南六( <atomic> 类型详解二 std::atomic )
    C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)
    C++11 并发指南五(std::condition_variable 详解)
    腾讯地图定位及坐标解析
    控制器里把文件转为二进制输出下载
    C#操作mongodb简记
    MYSQL备份还原问题
  • 原文地址:https://www.cnblogs.com/subendong/p/3460197.html
Copyright © 2020-2023  润新知