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");