; 首先感谢tmplinshi提供的函数,很便利。 ; 实际应用中,我们需要用到多音字,比如 ”行走” XZ,”银行” YH。 ; 主要是反过来查询的时候,让YH能匹配银行,YX也能匹配,像totalcmd上支持的那样。 ; 代码好处理吗?谢谢。 MsgBox % GetFirstChar("请在 AHK Unicode 中运行") ; 输出“QZ AHK Unicode ZYX” Return ; https://www.autohotkey.com/boards/viewtopic.php?p=10055#p10055 ; 功能: 中文转为拼音首字母,非中文保持不变 ; 备注: 在 AutoHotkey Unicode 中运行 GetFirstChar(str) { static nothing := VarSetCapacity(var, 2) static array := [ [-20319,-20284,"A"], [-20283,-19776,"B"], [-19775,-19219,"C"], [-19218,-18711,"D"], [-18710,-18527,"E"], [-18526,-18240,"F"], [-18239,-17923,"G"], [-17922,-17418,"H"], [-17417,-16475,"J"], [-16474,-16213,"K"], [-16212,-15641,"L"], [-15640,-15166,"M"], [-15165,-14923,"N"], [-14922,-14915,"O"], [-14914,-14631,"P"], [-14630,-14150,"Q"], [-14149,-14091,"R"], [-14090,-13319,"S"], [-13318,-12839,"T"], [-12838,-12557,"W"], [-12556,-11848,"X"], [-11847,-11056,"Y"], [-11055,-10247,"Z"] ] if !RegExMatch(str, "[^\x{00}-\x{ff}]") ; 如果不包含中文字符,则直接返回原字符 Return str Loop, Parse, str { if ( Asc(A_LoopField) >= 0x2E80 and Asc(A_LoopField) <= 0x9FFF ) { StrPut(A_LoopField, &var, "CP936") , nGBKCode := (NumGet(var, 0, "UChar") << 8) + NumGet(var, 1, "UChar") - 65536 For i, a in array if nGBKCode between % a.1 and % a.2 { out .= a.3 Break } } else out .= A_LoopField } Return out }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)