判断一个字符是否纯汉字(非标点符号、英数等)的函数
类似这种基础函数,现在习惯交给DeepSeek来写了。不知有无遗漏?——
FUNCTION IsPureChinese(tcChar)
* 判断输入参数是否为纯汉字?
* 注:只预设两种输入参数编码:GBK或UTF-8。
LOCAL llResult, lcChar
lcChar = ALLTRIM(tcChar)
IF EMPTY(tcChar)
RETURN .F.
ENDIF
* 自动检测编码并调用相应函数
DO CASE
CASE LEN(lcChar) = 1 && 单字节,肯定不是汉字
RETURN .F.
CASE LEN(lcChar) = 2 && 可能是GBK编码
lcChar = strconv(lcChar, 9) && 将双字节字符也转换为 UTF-8
RETURN IsUTF8Chinese(lcChar)
CASE LEN(lcChar) >= 3 && 可能是UTF-8编码
RETURN IsUTF8Chinese(lcChar)
OTHERWISE
RETURN .F.
ENDCASE
ENDFUNC
* UTF-8编码汉字判断
FUNCTION IsUTF8Chinese(tcChar)
LOCAL lnByte1, lnByte2, lnByte3, lnLen, lnUnicode
lcUnicode = strconv(tcChar, 12) && 将 UTF-8 转换为 Unicode
* 小端序:低位在前,高位在后
lnLow = ASC(SUBSTR(tcUnicodeStr, 1, 1))
lnHigh = ASC(SUBSTR(tcUnicodeStr, 2, 1))
lnUnicode = lnHigh * 256 + lnLow
* 汉字Unicode范围:0x4E00-0x9FFF
RETURN (lnUnicode >= 0x4E00 AND lnUnicode <= 0x9FFF)
ENDFUNC
[此贴子已经被作者于2025-11-18 12:09编辑过]







