Windows Azure 微软公有云体验(三) IIS中文编码解决方案
Windows Azure 微软公有云已经登陆中国有一段时间了,现在是处于试用阶段,Windows Azure的使用将会给管理信息系统的开发、运行、维护带来什么样的新体验呢?
Windows Azure平台中有网站、虚拟机、云服务、SQL数据库、存储、服务总线、网络、管理服务、活动目录等模块。
Windows Azure 微软公有云体验(一)已经对网站做了简单介绍,说到Windows Azure网站模块类似于服务器中的IIS,但是在某些方面跟我们平时使用的会有些区别的,下面谈谈Windows Azure网站模块的IIS中文编码带来的一些问题及解决方案。
饮水思源,转载勿删:http://www.cnblogs.com/evkchina/p/3469475.html,请支持关注北京易维清源代码生成软件www.evkchina.com
我们做了多次测试发现,发布到Windows Azure网站的编码方式为中文时会出现乱码问题,包括两方面:
1.在Get请求有中文参数时,使用IE11时提示502错误(使用F12调试模式中的edge、ie10、ie9、ie8和ie7同样出现此错误)

2.对于下载文件名乱码的测试结果如下,
| 浏览器 | Debug | 中文IIS7 | 微软云网站 | http_user_agent(浏览器版本号) |
| IE11 | 正常 | 正常 | 正常 | mozilla/5.0 (windows nt 6.1; wow64; trident/7.0; rv:11.0) like gecko |
| IE10 | 正常 | 正常 | 正常 | mozilla/5.0 (compatible; msie 10.0; windows nt 6.2; wow64; trident/6.0) |
| IE9 | 正常 | 正常 | 正常 | mozilla/5.0 (compatible; msie 9.0; windows nt 6.1; trident/5.0) |
| 搜狗高速 | 正常 | 正常 | 正常 | mozilla/5.0 (windows nt 6.1; wow64; trident/7.0; rv:11.0; se 2.x metasr 1.0) like gecko |
| 搜狗兼容 | 正常 | 正常 | 正常 | mozilla/5.0 (windows nt 6.1; wow64; trident/7.0; rv:11.0; se 2.x metasr 1.0) like gecko |
| FireFox | 正常 | 正常 | 正常 | mozilla/5.0 (windows nt 6.1; wow64; rv:25.0) gecko/20100101 firefox/25.0 |
| 正常 | 正常 | 正常 | mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/31.0.1650.63 safari/537.36 | |
| Opera | 正常 | 正常 | 正常 | mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/31.0.1650.57 safari/537.36 opr/18.0.1284.49 |
| safari 5 | 正常 | 正常 | 乱码 | mozilla/5.0 (windows nt 6.1; wow64) applewebkit/534.52.7 (khtml, like gecko) version/5.1.2 safari/534.52.7 |
| safari 7 | 正常 | 正常 | 乱码 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71 |
| chrome | 正常 | 正常 | 正常 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1711.3 Safari/537.36 |
| FireFox | 正常 | 正常 | 正常 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:20.0) Gecko/20100101 Firefox/20.0 |
safari出现错误,文件名为乱码但是能够正常下载打开

首先,是Windows Azure的环境因素,发布到[Windows Azure网站]的所有网站都是在后台的Windows服务器上托管的,Windows操作系统和IIS都是国际统一的,英文环境。因此发布的网站最好显式地设定网站或者文件的编码方式,建议使用UTF-8编码格式。
针对Get请求有中文参数的情况,可尝试显式的指定Charset,如:xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
然后,把中文参数给Encode一下
其次,针对下载文件乱码的情况,建议修改Web.config
将globalization节点修改为<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="GB2312" culture="zh-CN" uiCulture="zh-CN" />后,发布至Windows Azure网站,除了让人揪心的火狐,IE和其他浏览器均正常通过。
3.火狐浏览器下载文件名乱码的解决方法
经过测试,火狐浏览器下载文件时,文件名使用MIME编码方式,可避免文件名出现乱码。
MIME 是“多用途网际邮件扩充协议”的缩写,使用这种编码的原因是因为 Internet 上的很多网关不能正确传输8 bit 内码的字符,比如汉字等。编码的原理就是把 8 bit 的内容转换成 7 bit 的形式以能正确传输。MIME 定义了两种编码方法Base64与QP(Quote-Printable) :
Base 64 编码把三个Byte的数据用 4 个Byte表示,这样,这四个Byte 中,每个 Byte 实际用到的都只有 6 bit。Base 64的缩写为“B”。
QP(Quote-Printable) 编码,是把一个 8 bit 的字符用两位16进制数值表示,然后在前面加“=”。QP(Quote-Printable) 编码的缩写为“Q”
下面是从服务器下载文件的实例:
string cPath = System.Web.HttpContext.Current.Server.MapPath("/我的文件.PNG");
string fileName = "我的文件.PNG"; //输出的文件
string UserAgent = context.Request.ServerVariables["http_user_agent"].ToLower();
//判断浏览器
if (UserAgent.IndexOf("firefox") < 0)
{
//不是火狐浏览器
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
}
else
{
//是火狐浏览器,采用 MIME 编码
fileName = "=?GB2312?B?" + Convert.ToBase64String(Encoding.Default.GetBytes(fileName)) + "?=";
}
FileStream fileStream = new FileStream(cPath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
context.Response.AddHeader("content-type", "application/x-msdownload");
context.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
context.Response.AddHeader("Content-Length", count.ToString());
context.Response.BinaryWrite(bytes);
context.Response.Flush();
context.Response.End();
北京易维清源代码生成软件已完全支持与微软Azure云平台的对接,生成的源代码对各浏览器的兼容性问题已经全部解决。接下来会有更多Windows Azure 微软公有云的体验总结博文,感谢对易北京维清的关注。
Windows Azure 微软公有云体验(三) IIS中文编码解决方案的更多相关文章
- Windows Azure 微软公有云体验(二) 存储成本比较分析
Windows Azure 微软公有云已经登陆中国有一段时间了,现在是处于试用阶段,Windows Azure的使用将会给管理信息系统的开发.运行.维护带来什么样的新体验呢? Windows Azur ...
- Windows Azure 微软公有云体验(一) 网站、SQL数据库、虚拟机
Windows Azure 微软公有云已经登陆中国有一段时间了,现在是处于试用阶段,Windows Azure的使用将会给管理信息系统的开发.运行.维护带来什么样的新体验呢? Windows Azur ...
- Windows Azure系列公开课 - 第三课:创建虚拟机 (基础篇)
Windows Azure微软智能云平台主要提供四大类服务:计算服务(Compute),数据服务 (Data Services) ,应用服务 (App Services) ,网络服务(Network) ...
- 微软公有云Windows Azure 2014-03-26 国内正式商用
新浪科技讯 3月27日早间消息,微软国昨天下午宣布由世纪互联负责运营的Microsoft Azure公有云服务正式商用.这是国内首个正式商用的国际公有云服务平台.而开正式开放商用,意味着任何企业现在都 ...
- 微软公有云事件中心(Azure Event Hubs)在开放物联网大会(OIOT)啼声初试
发布于 2014-12-29 作者 刘 天栋 2014年12月18日,InfoQ在京召开开放物联网大会(Open IOT Conference),微软开放技术(中国)资深项目经理陈岭在大会中针对 ...
- 微软公有云Azure是惠及全人类的计算资源
回归往事,1975年,微软以DOS创业.在随后的三十年中,微软给人类贡献了视窗操作系统Windows,至今,人们对桌面操作系统XP仍然不离不弃.可是,面对互联网的兴起.微软应该怎么办呢? 微软内部不乏 ...
- 关于微软公有云Azure会计标准
前几年.中国的云计算项目往往搞成了房地产项目.大搞形"象project",没有实质性的内容.云计算老总成了房地产大老板,国内业界是在胡闹! 现今,世纪互联与微软(中国)联手搞公有云 ...
- Windows Azure系列公开课 - 第二课:为什么选择Windows Azure(下)
Windows Azure中有什么? |基础结构 Windows Azure能够根据您企业的需求提供最适合的基础结构,并且在业务发展或精简时能够根据变化的需求及时的做出改变.您可以将Windows A ...
- Windows Azure系列公开课 - 第二课:为什么选择Windows Azure(上)
Windows Azure是微软的云平台,可以提供广泛服务.您可以通过它搭建.部署并管理解决方案,用于实现您可以想象的几乎任何目标.换言之,WindowsAzure是拥有无限可能的世界.无论您是需要运 ...
随机推荐
- apache+php+mysql windows下环境配置
需要注意的是,目前apache和php以及mysql都要用32位的,机子是64位的也是安装32位.我之前安装64位的版本,总是出现问题.回归正题: 所需要软件: 1.apache:去官网下载,我这边用 ...
- java计时代码
public class Test{ public static void main(String[] args) { long startMili=System.currentTimeMillis( ...
- 第二百六十八天 how can I坚持
早上看了个电影<我的少女时代>,挺好看的. 下午从四点玩游戏一直玩到现在,也是疯了. 晚上也没有吃饭,是不是太堕落了. 徐斌他同学今天中午过来,做了个饭,也是服了,好难吃. 还没做好准备, ...
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
ArrayList实现可变数组的原理: 当元素超出数组内容,会产生一个新数组,将原来数组的数据复制到新数组中,再将新的元素添加到新数组中. ArrayList:是按照原数组的50%来延长,构造一个初始 ...
- C#应用Newtonsoft.Json操作json
Newtonsoft.Json是一个开源的C#操作json的项目,应用起来非常简单.其github地址; 下面的代码演示了如何应用Newtonsoft.Json序列号和反序列化. using Newt ...
- 《数据通信与网络》笔记--SCTP
SCTP(stream control transmission protocol)是一种新的可靠的,面向报文的传输层控制协议.它兼有UDP和TCP的特性,它是可靠的面向报文的协议,它保存报文的边界, ...
- JS 命名空间 实现方式 收集
一. 对象注册式 // 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object(); // 全局对象仅仅存在register函数,参数为名称空间全路径,如&q ...
- corpus academic writing
http://micusp.elicorpora.info/ http://corpus.byu.edu/coca/ http://rcpce.engl.polyu.edu.hk/RACorpus/
- AOV网络拓扑排序
这个算法,主要是为输出一个无环图的拓扑序列 算法思想: 主要依赖一个栈,用来存放没有入度的节点,每次读取栈顶元素,并将栈顶元素的后继节点入度减一,如果再次出现入度为零的节点,就加入到栈中.参考< ...
- Cocos2D Study - Preparation & Installation
---------------------------------------------------------------------------------------------------- ...