惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
爱范儿
爱范儿
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 叶小钗
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
博客园 - 司徒正美
博客园 - 【当耐特】
IT之家
IT之家

博客园 - 发条木偶

Google Search管理界面 Google Search初玩 虚机版的Google Search SPS2003升级到MOSS2007 Longhorn beta3 的 Role Longhorn beta3的feature - 发条木偶 - 博客园 MySQL和PostgreSQL的DAAB 用Word2007写Blog的一些好处 安装独立的根CA服务 - 发条木偶 - 博客园 一个SharePoint的MVP站点列表 WSS3.0入门第二天 WSS3.0入门第一天 javascript的Date问题 中文SPS2003管理界面变成英文的解决办法 WSSv3和SharePoint2007安装指南 WSS3.0中文版发布! 招聘.NET开发人员/开发经理 SharePoint中文Wiki发布了 SPSiteManager 2.3可以下载了
解决一个问题,发布一个自己开发的小工具
发条木偶 · 2006-12-31 · via 博客园 - 发条木偶

最近一直在做一个项目,以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也会有莫名其妙的错误,看来还是不能删除的。