1

我有这个功能:

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() 函数是否返回负数?

4

2 回答 2

1

Kanji 和 Kana 最有可能表示为 2 字节 Unicode 字符,因此您可以尝试以下操作:

ch = AscW(MidB(str, i, 2))
于 2013-06-06T11:01:15.053 回答
1

我找到了解决方案。它与 Ansgar 的解决方案非常相似,但我使用的是 MidB 和 1:
ch = AscW(Mid(str, i, 1))

于 2013-06-10T11:58:49.590 回答