我们使用以下组件开发我们的多语言网站:ASP.NET MBCompression对中国语言,jQuery UI的和的jqGrid
MBCompresion - 我们使用该库的源文件整合JS/CSS缩小和压缩。另外,我们编写了HttpFilter,它将页面上的所有JS/CSS结合到一个请求中(一个用于JS的一个用于CSS)。我们使用MBCompression的FileSystemStorage作为缓存策略。
jQueryUI Datepicker - 我们按原样使用它,包含本地化文件。
jQGrid - 同样,我们按原样使用它,包含本地化文件。
所有这一切工作正常... ASPX页面上的“脚本”标签组合到单一的“脚本”标签。它向jslib.axd发出请求HttpHandler,处理程序将所有JS文件组合到一个文件中,使用GZip压缩它,将压缩文件保存在FileSystem上,然后将该文件发送到客户端。
问题:唯一的问题是,当现场切换到中国的语言。当站点使用中文时,使用GZip压缩和FileSystem缓存,到达客户端的JavaScript无效 - 它包含奇怪的字符和错误,如“未捕获的SyntaxError:意外的令牌非法”。经过一番调查,我发现这个问题只与中文本地化的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压缩,everithing workd罚款。当我将缓存更改为OutputCache时,通过使用带有FileSystemCache的GZip中文版,唯一的问题是唯一的问题。所有其他语言(甚至Japanies)的作品都很完美。
我甚至不知道什么是一个问题。我认为它可能与编码或某事有关,但我没有看到FileStream上的这些参数或属性写入压缩的JS文件。
请帮我解决这个问题。
谢谢。
奇怪。中文文件存储在什么编码中? –
@Pekka UTF-8,代码页65001 –
@AlexDn:你在你的问题中包含了很多标签。带有jqGrid和jQuery Datepicker中文本地化的JavaScript文件只是保存为UTF-8的常用JavaScript文件。所以我想你现有的问题只是**纯粹的MBCompresion **。我建议您删除不需要的标签,并尝试仅将问题解决给[MBCompresion](http://mbcompression.codeplex.com/)专家。您可以考虑将'[.net]'标签替换为'[asp.net]',并删除'[jqgrid]'和'[jquery-ui]'。 – Oleg