VS 2005 BUG: 新增JScript文件编码问题引起乱码?

测试环境:WIN 2003 + VS2005(无SP1) + IE7,其他环境不详

在编写布局编辑器的过程中遇到了一个很奇怪的问题,着实让我郁闷了好几个小时,最后在同事(以前遇到过类似问题)的提醒下才发现是咋回事,个人认为这应该是VS 2005的一个BUG,至少说是一个不应该的疏忽!

如下图所示,我建立一个解决方案,包含两个工程[WebSite]WebSite1和[Web Control Library]EncodingTest:


EncodingTest中包含一个控件WebCustomControl1,然后在EncodingTest中(通过Add New Item对话框)添加一个JScript文件Test1.js,在WebSite1中添加一个JScript文件Test2.js,二者内容如下:
//  Test1.js
alert( " alert 中文 from class library " );

//  Test2.js
alert( " alert 中文 from website " );

然后将Test1.js以WebResource的方式嵌入到该assembly中,并注册到客户端,如下:
 1  [assembly: WebResource( " EncodingTest.Test1.js " " text/javascript " )]
 2  namespace  EncodingTest
 3  {
 4      [DefaultProperty( " Text " )]
 5      [ToolboxData( " <{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1> " )]
 6       public   class  WebCustomControl1 : WebControl
 7      {
 8           protected   override   void  OnPreRender(EventArgs e)
 9          {
10              Page.ClientScript.RegisterClientScriptResource( typeof (WebCustomControl1),
11                   " EncodingTest.Test1.js " );
12          }
13           //  dot.gif
14      }
15       //  dot.gif
16  }

在WebSite1的Default.aspx文件中插入如下代码:
< form  id ="form1"  runat ="server" >
< div >
    
< cc1:WebCustomControl1  ID ="WebCustomControl1_1"  runat ="server"  Text ="Test"   />
</ div >
< script  language ="javascript"  src ="Test2.js" ></ script >
</ form >

好了,运行一下WebSite1,如果照理说结果很简单,就是两个alert先后输出“alert("alert 中文 from class library"); ”和“alert 中文 from website ”罢了,但是诡异的事情就此发生,弹出的两个对话框显示如下:


从本文的标题可以看出发生该问题的缘由:编码。经过检查,惊讶地发现, 在WebSite1中添加的JScript编码方式默认是UTF-8的,而在EncodingTest添加的JScript编码方式却默认是ANSI的,这就是造成以上现象的罪魁祸首,无语ING……

其实以上的问题还是小事,在布局编辑器编写过程中问题更为严重,由于( ANSI编码方式的那个)JScript文件中的中文注释,居然还可能引起其中JS代码执行出错,不过这个问题IE 6.0以及以下版本才会出现,我机器上用的是IE 7和Firefox 2,一开始还没注意到,直到在同事机器上测试才发现!(不过我现在怎么也复现不了,不知道漏了什么地方)

P.S. 前文提到,我同事以前也遇到这个问题,不过那时他用了其他的文本编辑器才导致出现问题,我却是始终在VS 2005开发环境中,居然也出现问题,实在是不该啊!

Update:2007-02-06 13:48
1. 我猜测可能是工程项目模板中模板文件有问题(编码不统一???)导致的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值