【Azure 应用服务】App Service站点Header头中的中文信息显示乱码?当下载文件时,文件名也是乱码?

简介: 【Azure 应用服务】App Service站点Header头中的中文信息显示乱码?当下载文件时,文件名也是乱码?

问题描述

在本地开发的站点,响应头中的中文可以正常显示,部署到Azure App Service站点后,响应中文乱码。通过多方面验证,在代码中设置Response的Headers会显示乱码,而直接配置在Web.Config中的Header则能正常显示。

 

代码中写的中文会乱码

context.HttpContext.Response.Headers.Add("ChineseTest", "");

在web.config中的正常显示

<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <httpProtocol>
      <customHeaders>
        <add name="abc" value="中"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>

 

问题解决

#使用UTF8来编码中文字符
context.HttpContext.Response.Headers.Add("ChineseTest", HttpUtility.UrlEncode("中", System.Text.Encoding.UTF8));
#如果是需要下载文件或者设置文件名称,所以需要使用Content-Disposition头
string headerValue = "attachment;";
headerValue += " filename=" + HttpUtility.UrlEncode("中.txt", System.Text.Encoding.UTF8) + ";";
headerValue += " filename*=utf-8''" + HttpUtility.UrlEncode("中.txt", System.Text.Encoding.UTF8);
HttpContext.Response.Headers.Add("Content-Disposition", headerValue);

 

问题分析

Http Header默认只接受ISO-8859-1的编码,对于非ISO-8859-1/ASCII编码的字符,如果直接传输的话会由于编码不一致导致显示乱码的问题。所以建议采用URL encode的方式,将中文通过这种方式传输,那么浏览器收到该header时,会解码之后显示。 如:HttpUtility.UrlEncode("中文字符", System.Text.Encoding.UTF8)

 

另外,由于不同的浏览器支持的编码不太相同,目前市面上的大部分浏览器都是支持使用utf-8编码方式的,所以针对Safari浏览器显示异常的问题,在Content-Disposition后续推出的filename*参数中支持指定的编码方式对filename进行处理。 操作方式正是如下代码:

string headerValue = "attachment;";

headerValue += " filename=" + HttpUtility.UrlEncode("中.txt", System.Text.Encoding.UTF8) + ";";

headerValue += " filename*=utf-8''" + HttpUtility.UrlEncode("中.txt", System.Text.Encoding.UTF8);

HttpContext.Response.Headers.Add("Content-Disposition", headerValue);

 

参考资料

Content-Disposition头部中文编码测试:http://imushan.com/2019/04/10/network/Content-Disposition%E5%A4%B4%E9%83%A8%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81%E6%B5%8B%E8%AF%95/

HTTP协议header中Content-Disposition中文文件名乱码https://my.oschina.net/pingpangkuangmo/blog/376332

相关文章
|
4月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
580 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
504 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
896 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
258 0
|
开发工具 数据安全/隐私保护 安全
远程调试 Azure Web App
当我们将 Web App 部署在 Azure 上时,如果能够实现远程调试,将会极大的提高我们修复 bug 的效率。Visual Studio 一贯以功能强大、易用著称,当然可以实现基于 Azure 应用的创建、发布和调试。
1271 0
|
4月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
903 139

热门文章

最新文章