起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 161|回复: 9

【结帖】兄弟们注意啦:关于StringUtils.Pos函数和对汉字的支持问题**

[复制链接]
发表于 2007-9-30 15:17:58 | 显示全部楼层 |阅读模式
偶然的机会发下平台下的StringUtils.Pos对字符定位时,如果字符串中含有汉字,其定位时将汉字做为一个字符来处理,比如:
StringUtils.Pos(',','北京,上海')其返回值为3,而不是预料中的5,而Delphi下其返回值为5。希望各位使用的时候注意了。
如果想让其返回为5,请使用Justep.Tools.Mail.TIBMailConst.Pos函数。

BWos是个及其有用的函数,日常编码中用到的很多,为什么StringUtils.pos不对应与Delphi下的那个Pos呢?费解。
回复

使用道具 举报

发表于 2007-9-30 15:39:08 | 显示全部楼层
Delphi使用ASCII编码,而X3使用Unicode编码.
所以delphi认为一个汉字是两个字符,而X3认为一个汉字是一个字符。
谢谢楼主的分享。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-30 16:12:50 | 显示全部楼层
可是这样在分析字符串时会有问题的。
刚才我又试了一下,发现Length函数返回的也是将一个汉字认为是一个字符,而leftStr又不是将一个汉字当作一个字符。
现有字符串S='北京,上海'
我要取,左边的字符,那么
StrUtils.LeftStr(s, StringUtils.pos(',',s)-1)取出的结果不对啊。
有没有和delphi中一样的啊?
回复 支持 反对

使用道具 举报

发表于 2007-9-30 16:24:14 | 显示全部楼层
leftStr是StrUtils的函数。这个单元是把字符按ascii处理的。你看他们的方法名就可以看出来AnsiEndsStr
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-30 16:26:52 | 显示全部楼层
知道了,也就是说我用StringUtils.Pos,Length函数时不能使用leftStr等函数,使用StringUtils.Copy就可以是吧?
回复 支持 反对

使用道具 举报

发表于 2007-9-30 16:40:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-30 16:43:34 | 显示全部楼层
谢谢。顺便问一下,有没有delphi下的那个ansiLeftStr函数?
回复 支持 反对

使用道具 举报

发表于 2007-9-30 16:52:37 | 显示全部楼层
StrUtils.leftStr即7楼的那个。
回复 支持 反对

使用道具 举报

发表于 2007-10-8 16:25:21 | 显示全部楼层
楼主搞定了吗?
回复 支持 反对

使用道具 举报

发表于 2007-11-12 10:28:28 | 显示全部楼层
由于长时间没有反馈,先结帖了
有问题请开新帖
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-30 04:00 , Processed in 0.043701 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表