以下是引用吹水佬在2025-11-19 09:52:39的发言:
RETURN (lnUnicodeBE >= 0x4E00 AND lnUnicodeBE <= 0x9FFF)
RETURN BETWEEN(tcChar,0hE4B880,0hE9BFBF)
这两句有本质上的差别吗?
RETURN (lnUnicodeBE >= 0x4E00 AND lnUnicodeBE <= 0x9FFF)
RETURN BETWEEN(tcChar,0hE4B880,0hE9BFBF)
这两句有本质上的差别吗?
大佬啊,区别不在这一句!区别在:
lcUnicodeLE = strconv(tcChar, 12)
输入的3字节字符(它有可能是正确的 utf-8 ,也有可能是乱码,或别的任意东东……)尝试转换至 unicode ,那么,无效字符、伪UTF-8字符会在此处被自动过滤,转换不出 0x4E00--0x9FFF 之间的纯汉字 Unicode 来。
这也就是我所说的“其主要副作用是,自动验证utf-8字符参数的有效性”含义。
若自己写,在函数最前边可能应逐字节验证一下掩码,确保输入的参数是正确的 UTF-8 编码:
lnByte1 = ASC(SUBSTR(tcChar, 1, 1))
lnByte2 = ASC(SUBSTR(tcChar, 2, 1))
lnByte3 = ASC(SUBSTR(tcChar, 3, 1))
* 验证UTF-8编码有效性
IF (lnByte1 >= 0xE4 AND lnByte1 <= 0xE9) AND ;
(lnByte2 >= 0x80 AND lnByte2 <= 0xBF) AND ;
(lnByte3 >= 0x80 AND lnByte3 <= 0xBF)
...









程序代码: