我有这个功能:
Private Sub CheckParams(Values)
Dim Str, Ch
If IsArray(Values) then
Str = Join(Values, "")
Else
Str = Values
End If
For I = 1 To Len(Str)
Ch = Asc(Mid(Str, I, 1))
If Not ((Ch = 9) Or (Ch = 10) Or (Ch = 13) Or ((Ch > 31) And (Ch < 128))) Then
SetError("script result contains illegal characters.")
End If
Next
End Sub
如果输入值的字符不在For循环中的If语句列表中,则此函数抛出错误。问题是当我的输入值有日文字符时,验证通过而没有错误。我认为用于返回字符的ANSI代码的Asc()函数不知道如何处理日文字符。
这里似乎有什么问题?
Asc()函数是否返回负数?
答案 0 :(得分:1)
Kanji和Kana最有可能表示为2字节Unicode字符,因此您可以尝试这样的事情:
ch = AscW(MidB(str, i, 2))
答案 1 :(得分:1)
我找到了解决方案。它与Ansgar的解决方案非常相似,但相反MidB我使用Mid与1:
ch = AscW(Mid(str, i, 1))