Delphi中WideString与String的区别

导读:
   Delphi中WideString与String的区别
  2006-05-21 20:24:00 / 个人分类:编程技巧
  有谁能说出这两个类型的区别吗?后来大脚兄解释说:WideString 以两位方式处理字符串,而String 则一位一位处理。不过,这意味着什么呢?
  如果你只开发英文版的软件,那无所谓,这两个类型没有任何区别。但是如果使用了中文,那就要严格区分这两个类型的区别了,否则就像我前几天那样,为了乱码的问题百思不得其解。
  聪明一点的朋友会说:我知道它们的区别,所以凡是用到中文的地方我全都用WideString 。一开始我也是这么认为的,但其实这种观点恰恰可能会产生乱码哦。(不过不是非常严重的乱码,一般出现在字符串的末尾)
  在Delphi 的定义单元中有个函数,叫UTF8Encode ,定义是这么写的:
  function Utf8Encode(const WS: WideString): UTF8String;
  ...
  注意这个函数的参数写的类型是WideString ,不知道这算不算一个BUG ,我就是按照了它的定义使用了WideString 类型才出现了乱码。当我把参数类型换成String 后一切都正常了,这是为什么呢?
  后来仔细研究了一下UTF8Encode 的函数体,处理过程中又转向了Utf8ToUnicode 函数。原来它需要逐字节处理的。就是说无论是双字节的中文还是单字节的拉丁文,它全都把它看作机器码(什么乱七八糟的数字我也不管了,反正机器明白就行了),然后根据这些代码进行转换。而如果输入参数采用了双字节的WideString ,虽然中间还是可以保持正常处理,但是最后一个字就会处理不好了,所以就产生了乱码。
  所以,我认为UTF8Encode 的参数只能是String 类型,而不能是WideString 类型。否则就失去了这个函数的意义了,出来后还是乱码,呵呵。跟我一样的朋友注意了哦。

本文转自
http://hi.baidu.com/xingfupingguo/blog/item/e887a2fde604a246d6887d37.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值