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是拥有无限可能的世界.无论您是需要运 ...
随机推荐
- MUSIC算法学习笔记
MUSIC即多重信号分类. MUSIC算法仅能估计非相干关信源,对相干信源,其性能将随信源间的相 关系数的增加而逐渐降低,直至完全恶化. 阵列信号处理的只要问题包括:波束形成技术,零点形成技术,空间谱 ...
- nodejs + socket.io + redis 新手上路
最近要更新网站架构了,决定转入 nodejs + socket.io + redis 方式. 战斗刚开始: 网上的文章太松散,我根据各个网友的分享进行整理 ,让大家可以方便上手. 进入node.js之 ...
- [iOS 多线程 & 网络 - 2.1] - 解析json
A.iOS中json的基本使用 1.解析json数据 (1)json反序列化 对象{}格式 {key : value, key : value,...} 的键值对的结构可以反序列化为OC中的NSDic ...
- threading模块
threading — Higher-level threading interface¶ Source code: Lib/threading.py This module constructs h ...
- 经典代码-C宏 #转字符串【瓦特芯 笔记】
在调试C语言程序时,有时需要打印宏的名字.可以通过定义宏,宏名字的数组来获得. 例如: #include <stdio.h> #define MACRO_STR(x) {x, #x} ty ...
- 【Linux常用工具】02. 创建启动定时任务工具cron
一. cron 1. cron是一个守护程序,它提供定时器的功能,让用户在特定的时间得以执行默认的指令或程序.只要用户会编辑定时器的设置文件,就可以使用定时器的功能. 定时器文件格式: 2. cron ...
- Unity3D行为树插件Behave学习笔记
Behave1.4行为树插件 下载地址:http://pan.baidu.com/s/1i4uuX0L 安装插件和使用 我们先来看看插件的安装和基本使用方法,新建一个Unity3D项目,这里我使用的是 ...
- CoordinatorLayout的简单应用(材料设计新控件)
CoordinatorLayout字面意思为:协调布局,一般作为根布局使用.关于这个布局,记录一下两个用法,备忘. 一.配合 FloatingActionBar 使用 <?xml version ...
- MVC3 Razor模板引擎
http://blog.csdn.net/tiz198183/article/details/8659362 一.Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母 ...
- Jquery EasyUi实战教程布局篇
转自:http://www.kwstu.com/ArticleView/kwstu_20139413501290 送给大家一个非常好的后台布局模板,本人后来就选择了这个模板http://www.kws ...