分类目录归档:所谓技术

什么叫实践派?就是什么都没正经学过,概念都没搞懂可是偏偏能弄出点动静来。

Unicode编解码函数

在用XMLHTTP进行远程数据传输的时候,如果涉及到不同编码,比如从oblog向我的博客发送一个trackback ping,数据中包含的中文字符就会出现乱码。

为了解决这个问题,可以在发送之前,把所有的数据中的中文都进行Unicode编码然后再传输。这样就可以顺利解决问题。

但是有时候还会涉及到另外一个问题,就是到了目标程序后,要进行数据库检索,发送过来的中文字符串都已经编码为类似 &#32462 这样的Unicode编码,而数据库中的数据虽然以unicode编码保存,但是却还是中文字符,并没有表示为 &#32462 这样的形式。这就导致检索失败。

为了解决这样的问题,我只好采取这样的办法:发送端对中文字符串进行Unicode编码,接受端接收后进行Unicode解码,还原为中文字符。

这两个函数如下:

'**************************************************
'函数名:AnsiToUnicode
'作  用:转换为 Unicode 编码
'参  数:str —- 要转换的字符
'返回值:转换后的字符
'Author:nt2003
'**************************************************
Public Function AnsiToUnicode(ByVal str)
    Dim i, j, c, i1, i2, u, fs, f, p
    AnsiToUnicode = ""
    p = ""
    For i = 1 To Len(str)
        c = Mid(str, i, 1)
        j = AscW(c)
        If j < 0 Then
            j = j + 65536
        End If
        If j >= 0 And j <= 128 Then
            If p = "c" Then
                AnsiToUnicode = " " & AnsiToUnicode
                p = "e"
            End If
            AnsiToUnicode = AnsiToUnicode & c
        Else
            If p = "e" Then
                AnsiToUnicode = AnsiToUnicode & " "
                p = "c"
            End If
            AnsiToUnicode = AnsiToUnicode & ("&#" & j & ";")
        End If
    Next
End Function
'**************************************************
'函数名:AnsiToUnicode
'作  用:转换为 Unicode 编码
'参  数:str —- 要转换的字符
'返回值:转换后的字符
'**************************************************
Function UnicodeToAnsi(ByVal str)
    If IsNull(str) or str = "" Then
        UnicodeToAnsi = ""
        Exit Function
    End If
    Dim reg,strMatch,strTemp,arrMatches
    strTemp = str
    Set reg = New RegExp
    reg.IgnoreCase = True
    reg.Global = False
    reg.Pattern = "&#(d*);"
    Set arrMatches = reg.Execute(str)
    For Each strMatch In arrMatches
        str = Replace(str,strMatch.Value,chrW(strMatch.SubMatches(0)))
    Next
    set reg=Nothing
    UnicodeToAnsi = str
End Function

本条目发布于。属于所谓技术分类。

利用WebService进行网站整合的实现

一、设定环境为两个站点对等整合;

站点一:http://tempurl.org

站点二:http://myurl.com

站点一和站点二希望共享注册用户;以用户Email为用户的唯一标识;

现在,有站点二的用户A访问站点一,过程如下:

用户在站点一用站点二的信息进行登陆–>站点一验证用户失败–>向站点二查询该用户信息–>站点二验证成功,将信息返回给站点一–>站点一登记该用户信息并进行登陆–>用户登录成功。

站点一的登陆验证过程:

1.获得用户提交的email和密码;

2.进行数据库查询和验证–>失败;

3.引用站点二的WebService(假设为MyInterface),本地实例名为sValidator;

4.判断:If sValidator.IsUser = True then

username = sValidator.username
password = svalidator.password
5.登记此用户,将基本信息写入数据库;

6.登陆此用户。

如果是站点一的用户登录站点二,过程一样。

二、设定环境为多站点以站点一为核心进行整合;

站点一:http://tempurl.org

站点二:http://www.myurl.com

站点三:http://bbs.myurl.com

站点一为核心;一种情况是注册可以各自进行,在站点一以外的站点注册时,先通过站点一的Webservice进行注册,如果注册失败,则在本地站点也不予注册;这样确保所有用户在站点一都有记录;

假设A用户在站点二进行注册

流程如下:

注册成功的:站点二提交该用户信息给站点一进行注册–>站点一进行检验,资料没问题,写入数据库,注册成功,返回一个信息给站点二–>站点二将用户资料写入数据库,注册成功;

注册失败的:站点二提交该用户信息给站点一进行注册–>站点一进行检验,资料有问题或其它原因,不能注册,返回一个信息给站点二–>站点二向用户返回注册失败信息;

站点二的注册流程:

1.获取用户信息,进行有效性等验证通过;

2.引用站点一的WebService,假设为MyInterface,本地实例名:sRegUser

3.进行注册

sRegUser.UserName = username
sRegUser.Password = password
sRegUser.UserEmail = useremail
If sRegUser.Reg = True Then
'进行本地注册
Else
'注册失败
End If

现在,用户A通过站点二已经注册成功了,他分别到在三个站点进行登陆

站点一:

用户登录–>站点一验证登陆成功

站点二:

用户登录–>站点二验证登陆成功

站点三:

用户登录–>站点三验证登陆失败,向站点一查询–>站点一验证登陆成功,返回给站点三–>站点三在本地数据库登记该用户–>站点三验证登录成功

上述的整个思路,是以站点一的WebService作为核心,如果站点二是ASP.NET站点,那么就创建本地代理来使用;如果站点三是ASP站点,那么可以考虑采用Microsoft Soap Tool Kit,如果是其它语言平台的,就用其它语言平台的WebService使用工具。都不行的情况下,可以用Post请求的方式来进行。

具体的实现以后如果有空再细谈,这里只是一个思路,其实这样的思路并不复杂,而且已经有很多运用的实例了。实现起来不是问题,只是多注意WebService的安全性就好了。

本条目发布于。属于所谓技术分类。

小技巧:给英文版Office2003“充电”

中文版的 Office 2003 里面,有一些亚洲语言专有选项,尤其是中文的特性,在英文版里就没有,不光是默认没有安装,而是软件里就完全没有那部分功能。

比如中文简体繁体互换啊,中英文互译啊,中文的拼写检查和断字等等。

在用英文版 Office 2003 的时候又想用这些针对中文的特殊功能,那怎么办呢?

继续阅读

本条目发布于。属于所谓技术分类。

Visual Studio 2005体验感受

Visual Studio .Net 2003一直没有好好试试,只是拿它做了个.NET的个人通讯录自己用,这次去微软发布会现场看到的演示,感觉Visual Studio 2005有很大的改进,因为我在现场的时候试用了一下WEB开发功能,感觉很不错,很多工作一行代码都不用写就能实现的。

  所以今天就装了Visual Studio 2005体验了一把。

  VS2005安装的时候集成了.NET FrameWork2.0, .NET Compact FrameWork 1.0SP3和2.0,Device Emulator 1.0, Document Explorer 2005, SQL SERVER 2005 Express Edition和Native Client等相关工具,比2003方便易用得多,而且安装过程也比2003快,还没有那么多重启,界面也很漂亮。

[align=center][/align]

  或许是因为英文版的关系,VS2005+MSDN+SQL Server 2005安装完以后比2003占用的空间小了很多,不过不知道是不是我的机器还是系统的问题,启动后,建立工程,修改配置等等操作都比2003慢。

  装完以后还没来得及更细致地探索VS2005,小小地试用了一下,用它建立了一个.NET 站点,写了个手机用的小程序,感觉很爽,最欣慰的是:

  1. VS 2005自带了WEB SERVER,所以无需IIS即可本机调试WEB站点,而且调试功能比IIS和VS.NET2003要强大得多得多;

  2. VS 2005建立的页面默认是XHTML 1.0 Transitional规范,符合WEB标准,HTML Editor也改善非常多,提供了50多种WEB 控件,非常方便。

  3. 利用VS2005的智能设备开发界面,很轻松就可以写出手机或者PDA的应用程序,而且本身集成了相关智能设备的模拟器,其中的 SmartPhone 2003模拟器长得好像多普达的界面,我正好用的是多普达智能手机,太高兴了:)

  4.Visual Studio .Net 2003的工程,我升级了两个到2005,都是全自动完成,而且Error 0, Warning 0,这下可以放心了。

  微软把Visual Studio .NET 2003中的“.NET”去掉,直接命名为Visual Studio 2005,可见他们对这套产品的信心,第一步体验的结果,也的确感觉非常不错。

  很多人应该还在等中文版,网上也有人利用SQL Server 2005 CTP中的语言包来制作出VS2005的简体中文版,其实感觉还是应该用英文版好,本身程序员多多少少都还是会点英语的吧,而且一款开发软件,其实真正用到的英语也很少而且很简单,软件本身又是多语言支持的,用英文版适应以后,肯定会比用中文版感觉舒服得多的。

  这个礼拜要给研究生处做一套WEB程序,很小但是很多特性都适合用XML和.NET来做,我决定用VS2005来开发,正好是个熟悉软件和练习的好机会:)

ASP中的数字和字符比较

昨晚和老迷聊天聊到很晚,说到一个把字符串转换为数字进行比较的问题。老迷说他喜欢保持字符串本身的类型,进行字符串的匹配比较,而不喜欢把字符串强制转换为数字进行比较。 一开始我不太明白这到底有什么区别,比如

a = "1"
If a = 1 Then
    'Something
End If

a = "1"
If a = "1" Then
     'Something
End If

继续阅读

用ASP为blog程序编写Trackback功能

  作为所谓的Blog三大特征之一的Trackback Ping,在网络上并没有一个真正的规范,它实际上最早是在Moveable发明并开始运用的一种技术,与另外两项被广泛认为是Blog最主要特征的RSS和Permalink相比,RSS本质上是是一种遵循W3C RDF规范的XML格式,Permalink是一种非常通用的静态地址技术,而Trackback Ping目前为止仅仅是在blog程序中得到运用,除了Moveable的一份技术规范文档外,也没有什么权威的标准,尤其在国内,众多blog程序有的支持有的不支持,有的有限支持,甚至还有因标准不一致而不能互相通信的(参见《blog is dead(blog已死)》)。 继续阅读