利用fis3自动化处理asp.net项目静态资源时遇到的一个编码问题

时间:2023-11-21 11:05:20

fis3是一款强大的前端自动化构建工具,提供了很多非常实用的功能,具体参考http://fis.baidu.com/,使用该工具需要安装node环境。

最近在部署网站的时候尝试了一下使用该工具对前端资源进行处理,因为 FIS3 的构建不会修改源码,而是会通过用户设置,将构建结果输出到指定的目录,所以用起来很放心。在使用的过程中发现了一个问题,就是本来正常的网站,通过fis3处理后,出现了中文乱码情况,这个问题不解决就没法使用了。首先,查看了一下用fis3处理前后的文件编码,发现未处理前是带Bom的utf8格式(因为是在windows环境中使用visual studio开发的asp.net项目,所以在保存的时候,vs会自动将文件存为带Bom的utf8格式),处理后变为不带Bom的utf8格式,看来是fis3对utf8格式的文件进行了处理,去除了文件中的Bom头,于是找到fis3模块的安装目录(可以通过npm root -g命令找到node全局模块的安装目录,如果安装了fis3就会在该目录中找到fis3模块对应的源文件目录),打开lib目录下的util.js文件,发现在667行的_.readBuffer方法中对带Bom的utf8格式文件的内容删除了第一个字节。

if (buffer.charCodeAt(0) === 0xFEFF) {
buffer = buffer.substring(1);
}

于是,为了与vs保存的文件格式一致,在这里注释掉这句代码,使处理后的文件保留BOM头。经过修改后重新部署,发现依然是乱码,这下有点困惑了,格式都该一致了,怎么还不行呢,难道是网站的配置有问题吗,于是看了一眼web.config文件,对请求与响应格式也都进行配置,

<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />

并且网页中也写了 <meta http-equiv="Content-Type" Content="text/html;charset=utf-8"> ,既然这两个地方都没问题,那么是不是iis的问题呢,于是打开iis,在“.NET全球化”里面发现文件的编码是gb2312,将其改为utf8,重新部署,这回问题总算解决了。