发条木偶

乐趣为王

2006年12月31日 #

中文SPS2003管理界面变成英文的解决办法

中文SPS2003发布的时候,正值2003年,.NET Framework 1.1和Windows Server 2003刚刚发布不久。但是随着.NET Framework 1.1的补丁不断出来,以及Windows Server 2003的补丁不断推出,即使SPS2003也不断推出补丁,但是还是有一些著名的小问题。比如中文的SPS2003的管理界面都变成了英文的界面。

这个问题估计可能不是SPS2003的问题,因为SQL Server 2000 Reporting Service也有类似的问题,解决的办法也是一样的。我最早发现这个问题是在2004年,当时.NET Framework 1.1 SP1刚刚发布。咨询微软的工程师,得到了support网站的一篇文章。文章里面讲由于.NET Framework 1.1 SP1的某些安全改进影响了.NET Framework 1.1的i18n解决方案,导致SPS2003的管理界面变成了中文。解决办法很简单,在创建的网站的web.config文件属性的“安全”里面,添加一个“Everyone”,并赋予“完全”的权限。这个方法在某种程度上会降低安全性,但是具体会带来什么危险,我也不清楚了。

最近,客户和我反映管理界面还是经常变成英文的,用上述的方法改一下,过一段时间就又会自己的变成英文的。我自己试了一下,发现上述的方法好像跟本不起作用了。我向客户了解了一下,最近对SPS2003做过什么处理,结果是客户最近部署过自己开发的WebPart,在web.config里面添加过SafeControl。我看了一下,发现web.config文件的编码被改成ANSI的编码了,修改为UTF-8编码以后,不用修改权限,管理界面就恢复中文了。再仔细研究了一下用户的使用习惯,她总是先下载web.config文件,用UltraEdit编辑以后,在上传回去。问题就出在UltraEdit,它在保存文件的时候,并不保持文件原来的编码格式,而是默认使用当前系统的默认编码(GB2312)来保存。不知道这个是UltraEdit的功能还是缺陷,或者其他人汉化导致的。

Reporting Service的问题也是类似的,我们做过一个安全插件,编辑过他的两个虚拟目录的config文件。把这些congfig文件的编码和权限调整过来以后,Reporting Service的管理界面也恢复正常了......

我在这里向大家推荐Editplus2编辑器,韩国人开发的,相当不错,支持在ftp里面直接打开,还可以另存到ftp上面。只不过好像国内没有代理商......

posted @ 2006-12-31 18:09 发条木偶 阅读(2048) 评论(3) 编辑

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

最近一直在做一个项目,以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 @ 2006-12-31 17:14 发条木偶 阅读(2696) 评论(8) 编辑