回 帖 发 新 帖 刷新版面

主题:vista系统下,汉字转拼音简码问题

各位老师,用下面的代码,在xp系统下,汉字可以正常转换成拼音简码,而在vista下,不能正常转换,比如,商品名称为"采乐",xp下正常为"CL",vista下为"CM",是什么原因?

xp下转换代码
*******************************
PARAMETER cHZCHR
LOCAL cPYCHR,i,j,C,HZ
cPYCHR=""
PYCode="八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗" &&从b开始的每个拼音码的首字符
FOR  i=1 TO LEN(cHZCHR)
   IF ASC(SUBSTR(cHZCHR,i,1))>160 &&判断是否为汉字
        HZ=SUBSTR(cHZCHR,i,2)
        C=""
        FOR j=1 TO 26
            IF SUBSTRC(HZ,1,1)<SUBSTRC(PYCode,j,1) &&进行汉字比较
                C=CHR(96+j)  &&得到首位拼音码
               EXIT
            ENDIF
         ENDFOR
         cPYCHR=cPYCHR+UPPER(C)
         i=i+1
      ELSE
         cPYCHR=cPYCHR+UPPER(SUBSTR(cHZCHR,i,1))
   ENDIF
ENDFOR
RETURN cPYCHR
*******************************************

回复列表 (共4个回复)

沙发

用  myfll.fll 的topy()

板凳

我装的是WIN7和XP,没有装VISTA
但我用WIN7来试了一下,结果“祖”字得不到正确的结果,
然后我尝试用调试器来追踪了一下变量的变化,
结果发现我用着的函数,居然跟你这个代码一模一样,
我的脑袋肯定是被驴踢过了,于是,
重新查找一次ASCII码表,
修改代码如下,可得正确结果。



Parameter cHzchr
local cPychr,i,j,Hz
cPychr=""
set collate to "PINYIN"
PYcode="啊芭擦搭蛾发噶哈击击喀垃妈拿哦啪期然撒塌挖挖挖昔压匝貭"
for i=1 to len(cHzchr)
    if asc(substr(cHzchr,i,1))>160
       Hz=ASC(substr(cHzchr,i,2))
       for j=1 to 28
           if Hz<ASC(substrc(PYcode,j,1))
              cPYchr=cPYchr+chr(63+j)
              exit
           endif
       endfor
       i=i+1
    else
       cPYchr=cPYchr+upper(substr(cHZchr,i,1))
    endif
endfor
return cPYchr

3 楼

为了进一步变态的加强效果,再一次进行改进:

Parameter cHzchr
local i,hz,cPYchr
cPychr=""
for i=1 to len(cHzchr)
    if asc(substr(cHzchr,i,1))>160
       hz=ASC(substr(cHzchr,i,2))
       cPYchr=cPYchr+ICASE(hz<45217,"?",hz<45253,"A",hz<45761,"B",hz<46318,"C",hz<46826,"D",hz<47010,"E",hz<47297,"F",hz<47614,"G",hz<48119,"H",hz<48119,"I",hz<49062,"J",hz<49324,"K",hz<49896,"L",hz<50371,"M",hz<50614,"N",hz<50622,"O",hz<50906,"P",hz<51387,"Q",hz<51446,"R",hz<52218,"S",hz<52698,"T",hz<52698,"U",hz<52698,"V",hz<52980,"W",hz<53689,"X",hz<54481,"Y",hz<55456,"Z","*")
       i=i+1
    else
       cPYchr=cPYchr+upper(substr(cHZchr,i,1))
    endif
endfor
return cPYchr

4 楼

最新互助式项目。
这是一个互助的模式。
不推广人也有钱赚的。分A B两个网。
不推广的人在A网。推广的人 在B网。
B网推广的人帮助A网。
A网赚取6000元出局。
B网就多了。
详情了解加QQ919169870 
  http://blog.sina.com.cn/s/blog_6b19ec920100liv6.html
C易特奖励制度 
http://blog.sina.com.cn/cyite6
C易特更多资料博客

我来回复

您尚未登录,请登录后再回复。点此登录或注册