我们使用以下组件开发我们的多语言网站:
MBCompresion - 我们使用该库的源文件来集成 JS/CSS 缩小和压缩。此外,我们编写了 HttpFilter,它将页面上的所有 JS / CSS 组合到一个请求中(一个用于 JS,一个用于 CSS)。我们使用 MBCompression 中的 FileSystemStorage 作为缓存策略。
jQueryUI Datepicker - 我们按原样使用它,包括本地化文件。
jQGrid - 同样,我们按原样使用它,包括本地化文件。
所有这一切都很好...... ASPX 页面上的“脚本”标签组合成单个“脚本”标签。它向 jslib.axd HttpHandler 发出请求,处理程序将所有 JS 文件合并为一个文件,用 GZip 压缩它,将压缩文件保存在 FileSystem 上,然后将该文件发送给客户端。
问题:唯一的问题是网站切换到中文时。当网站在中文时,使用 GZip 压缩和 FileSystem 缓存,到达客户端的 javascript 无效 - 它包含奇怪的字符和错误,如“Uncaught SyntaxError: Unexpected token ILLEGAL”。经过一番调查,我发现只有 jqGrid 和 jQuery Datepicker 的中文本地化文件存在问题。
这是到达客户端的 javascript 示例(只是一些行):
jQuery(function($){$.datepicker.regional['zh']={closeText:'s�',prevText:'<
Uncaught SyntaxError: Unexpected token ILLEGAL
',nextText:'>',currentText:'�)',monthNames:['','�',' ','�','�','m','','k',']','A','A','A�'],monthNamesShort:['','�',' ','�','�','m','','k',']','A','A','A�'],dayNames:['�','','�',' ','�','�','m'],dayNamesShort:['h�','h','h�','h ','h�','h�','hm'],dayNamesMin:['�','','�',' ','�','�','m'],weekHeader:'h',dateFormat:'yy-mm-dd',firstDay:1,isRTL:false,showMonthAfterYear:true,yearSuffix:'t'};$.datepicker.setDefaults($.datepicker.regional['zh']);});
当我禁用 GZip 压缩时,一切正常。当我将缓存更改为 OutputCache 时,一切都可以...唯一的问题是,当我在中文上使用带有 FileSystemCache 的 GZip 时。所有其他语言(甚至日本人)都可以完美运行。
我什至不知道有什么问题。我认为它可能与Encoding或其他东西有关,但我在FileStream上没有看到将压缩JS写入文件的此类参数或属性。
请帮我解决这个问题。
谢谢。