发条木偶

乐趣为王

解决一个问题,发布一个自己开发的小工具

最近一直在做一个项目,以SOA为理念基于SPS2003的三个应用系统。后端以WebService提供服务,前端为嵌入SPS的UserControl,WebService与UserControl之间由序列化的对象进行通讯。由于开发环境是VS.NET 2003,所以就直接使用VSS6d来管理代码了,结果问题就跟着来了:VSS6d不支持UTF-8编码的程序文件以文本方式储存,否则就只能二进制方式存储。在开始阶段主要是开发WebService并没有什么问题,但是随着大量的UserControl开发出来并部署到SPS2003当中的时候,测试人员报告界面乱码。手工把ascx文件转换成UTF-8编码后,问题消失。

这样貌似问题解决了,但是以后每次重新编译部署的时候,都要把上百的ascx文件的编码手工修改一遍。修改编码成了一个极其繁琐的体力劳动......自己研究了一下,又请教了一下微软的工程师,有三个解决方法:

  1. 在备份以后,重新把代码加入VSS的代码库,使用二进制方式存储代码。这会带来两个问题:一是二进制方式存储,在不同的代码版本之间不能做Different操作,二是二进制方式存储不再是层量存储,每签入一次,保存的都是一个完整的副本。
  2. 使用VS2005 TFS来做代码管理。这需要在VS.NET2003内安装TFS的插件。这种方法微软网站上面介绍过,没有实践过。
  3. 使用批量转换工具将ascx的编码转换过来。

我的项目现在只好使用第三种方式,但是找不到有批量的GB2312转UTF-8编码的工具,我只好自己写了一个。这个工具内部的转换引擎是GNU的libiconv,大家可以下载我编译好的版本直接使用,或者下载源代码自己研究。这个工具用.NET2.0写的,所以运行需要.Net Framework 2.0 Runtime。

细心的朋友会问我,为什么我只强调了ascx为什么没有提asmx呢?我当初也奇怪这个问题,后来研究了web.config文件里面的system.web段的globalization的fileEncoding属性约束了ASP.NET从本地读取程序文件的编码。在默认的ASP.NET项目的web.config里面是没有这个属性的,ASP.NET默认会以Windows的默认代码页来读取程序。而我们的asmx文件内部没有中文,即使有中文,ASP.NET也可以识别出来。

但是SPS2003创建的站点里面的web.config文件里面的system.web段的globalization的fileEncoding属性为"utf-8"。我测试了一下,这个属性删除以后,SPS也会有莫名其妙的错误,看来还是不能删除的。

posted on 2006-12-31 17:14 发条木偶 阅读(2637) 评论(8)  编辑 收藏 网摘 所属分类: WSSSharepoint技术交流

评论

#1楼 2006-12-31 18:43 Jeffrey Zhao      

使用utf-8编码非常总要,尤其如果想在应用中引进AJAX。
一般来说所有的文件,也要是UTF-8的,尤其如果.cs文件中有“汉字”等字符。不过这种Hard-code汉字的做法,也不是个好的Practice……
  回复  引用  查看    

#2楼[楼主] 2006-12-31 23:20 发条木偶      

@Jeffrey Zhao
对于cs文件来讲问题并不大,编译器在编译之前会做一次编码解析的,在解析成Unicode之后才会开始编译的。所以在我的上面的论述里面,根本就没有考虑cs的问题。
现在Windows的内码都是Unicode了
  回复  引用  查看    

#3楼 2007-01-02 23:46 Jeffrey Zhao      

@发条木偶
是吗?我曾经做过大型项目的Localize工作,对于CS里硬编码的中文,的确会有问题出现,由于当时服务器在美国,无法方便地调试,花了很大精力才找到问题,因此我印象很深,把cs文件编码改成Unicode才解决。
  回复  引用  查看    

#4楼[楼主] 2007-01-03 08:59 发条木偶      

呵呵,在Windows2000的时候就已经是这样了
最简单的表现就是微软产品的本地化版本出现的时间越来越短了
现在Vista和Office、VisualStudio2005在beta2时期就有人把中文包剥离出来,用在之后没有中文beta后续版本出现的版本上...
这些没有统一的内码设计,是不可能在短时间内作到的。
  回复  引用  查看    

#5楼 2007-01-03 18:14 曲滨      

用 VSS8.0 不就可以了吗?
8.0支持很多编码的。

而且和VSS6.0 兼容,不用升级即可使用
因为,比较时候出乱码,是VSS客户端的编码兼容问题
不是VSS 数据存储的有问题、所以很方便的即可升级的。

VS2005 的光盘里有,VS2005 TFS 有点大
不是很大的项目组没必要用。

ms 网站上那个108 天试用里好像就有,不过VSS 是没限制的应该!
没试验过自己看看吧。
  回复  引用  查看    

#6楼[楼主] 2007-01-03 19:43 发条木偶      

这个VSS8.0我还没有用过呢   回复  引用  查看    

#7楼 2007-01-04 09:28 Icebird      

VSS 8.0就是Visual Source Safe 2005,当初是和VS2005英文版一起出来的   回复  引用  查看    

#8楼 2007-01-04 13:04 yi      

使用定级保存手工做一下也很快啊   回复  引用  查看    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 609096




相关文章:

相关链接: