如何获取中文字符串的首拼
比如“汉字”那么得到H,只需要字符串第一个中文字符的首拼就可以了。谢谢。。。。。。。[ 本帖最后由 taishantop 于 2009-2-16 22:40 编辑 ] 这个东西你得有一个数据库。。。。哪里这么简单
获取中文首字母+数字+英文 返回大写英文
Global $AscII = [,,,,,,,,,,,,,,,,,,,,,,,]Func _StringToLetter($sString)
Local $sReturn = ''
Local $sStringLen = StringLen($sString)
For $sI = 1 To $sStringLen
$sReturn &= _Letter2Alphabet(StringMid($sString,$sI,1))
Next
Return $sReturn
EndFunc
Func _Letter2Alphabet($sLetter)
If BinaryLen(StringToBinary($sLetter, 4)) = 3 Then $sLetter &= Chr(0)
Return _Num2Alphabet(Dec(StringTrimLeft(StringToBinary($sLetter),2)))
EndFunc
Func _Num2Alphabet($sDigital)
For $sI = 0 To 22
If BitAND($sDigital>=$AscII[$sI],$sDigital<$AscII[$sI+1]) Or $sDigital=$AscII[$sI] Or $sDigital=32+$AscII[$sI] Then Return Chr($AscII[$sI])
Next
For $sI = 48 To 57
If $sDigital=$sI Then Return Chr($sI)
Next
Return ''
EndFunc
这个应该能满足你的要求
返回字符串中第一个汉字的首写字母Global $AscII = [,,,,,,,,,,,,,,,,,,,,,,,]
Func _String2Alphabet($sString)
Local $sLetter
$sStringLen = StringLen($sString)
For $sI = 1 To $sStringLen
$sLetter = StringMid($sString,$sI,1)
If BinaryLen(StringToBinary($sLetter, 4)) = 3 Then
Return _Num2Alphabet(Dec(StringTrimLeft(StringToBinary($sLetter & Chr(0)),2)))
EndIf
Next
Return ''
EndFunc
Func _Num2Alphabet($sDigital)
For $sI = 0 To 22
If BitAND($sDigital>=$AscII[$sI],$sDigital<$AscII[$sI+1]) Then Return Chr($AscII[$sI])
Next
Return ''
EndFunc 我靠 受教了!!!
佩服
确实好用。小弟先谢过了。。。。。。。。。。 对文件编码 汉字编码等 一直很迷茫 囧rz 学习一下。 学习一下。 本帖最后由 netegg 于 2012-12-5 01:53 编辑/** 获取一个汉字的拼音首字母。
* GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码
* 例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43
* 0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’
*/
区位码拼音范围百度下,http://wenku.baidu.com/view/343ac319964bcf84b9d57b7d.html
;区位码表
;a:1601~1636
;b:1637~1832
;c:1833~2077
;d:2078~2273
;e:2274~2301
;f:2302~2432
;g:2433~2593
;h:2594~2786
;j:2787~3105
;k:3106~3211
;l:3212~3471
;m:3472~3634
;n:3635~3721
;o:3722~3729
;p:3730~3857
;q:3858~4026
;r:4027~4085
;s:4086~4389
;t:4390~4557
;w:4558~4683
;x:4684~4924
;y:4925~5216
;z:5217~5589 /** 获取一个汉字的拼音首字母。
* GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码
...
netegg 发表于 2012-12-5 01:28 http://www.autoitx.com/images/common/back.gif
你LS典型的挖坟,顺便把你带进去了…… 回复 11# afan
没,编码转换这部分迟早要折腾,和加解密有关系,放着当收藏了 二级汉字不在此范围内,应该如何做? Global $AscII = [,,,,,,,,,,,,,,,,,,,,,,,]
Func _StringToLetter($sString)
Local $sReturn = ''
Local $sStringLen = StringLen($sString)
For $sI = 1 To $sStringLen
$sReturn &= _Letter2Alphabet(StringMid($sString,$sI,1))
Next
Return $sReturn
EndFunc
Func _Letter2Alphabet($sLetter)
If BinaryLen(StringToBinary($sLetter, 4)) = 3 Then $sLetter &= Chr(0)
Return _Num2Alphabet(Dec(StringTrimLeft(StringToBinary($sLetter),2)))
EndFunc
Func _Num2Alphabet($sDigital)
For $sI = 0 To 22
If BitAND($sDigital>=$AscII[$sI],$sDigital<$AscII[$sI+1]) Or $sDigital=$AscII[$sI] Or $sDigital=32+$AscII[$sI] Then Return Chr($AscII[$sI])
Next
For $sI = 48 To 57
If $sDigital=$sI Then Return Chr($sI)
Next
Return ''
EndFunc
MsgBox(4096,'te',_StringToLetter("中国人"))
为什么是空白啊?
页:
[1]