我目前正在开发一个Access 2010应用程序,该应用程序的文本框可以接受日语字符(KANJI)的输入。一旦textbox中的焦点(On事件)丢失,它就会检查是否所有字符都是双字节的,否则就会生成警告消息。您可以参考下面的代码:
If LenB(StrConv(Trim(strJapanese), vbFromUnicode)) <> Len(Trim(strJapanese)) * 2 Then
'Inform the user to input double-byte Japanese characters
End If
问题是,即使我在文本框中输入双字节字符,上述条件也是满足的。这意味着字符串的字节长度等于它的长度。
请注意,使用此访问工具在我同事的计算机和输入日语字符将不满足上述条件-这是预期的行为。这是我的环境问题吗?我们使用相同的操作系统和相同的MS版本,所以我不明白为什么我们没有相同的结果。
我希望在这个问题上有任何帮助。谢谢!
发布于 2016-09-28 18:24:14
我不知道LenB,但是如果您只想检查字符串是否包含kanji,那么简单地循环遍历字符串中的每个字符并检查AscW(char)就更容易了。这将返回一个表示字符的Unicode值的数字,所有kanji都包含在&H4E00 (一)和&H9FAF (龯)之间。唯一的例外是kanji迭代标记々,它是Unicode &H 3005。
注意: AscW返回正数从1到32767表示&H1到&H7FFF,对于&H 8000返回负数从-32768到-1。这种拆分发生在kanji Unicode块的中间,因此您不能简单地使用一个开关语句"Case &H4E00 to &H9FAF"...you必须将其拆分为"Case &H4E00 to &H7FFF,&H 8000 To &H9FAF“。
Function containsOnlyKanji(str As String) As Boolean
If Len(str) = 0 Then Exit Function 'empty strings don't have any kanji so return false
Dim i As Long
For i = 1 To Len(str)
Select Case AscW(Mid(str, i, 1))
Case &H4E00 To &H7FFF, &H8000 To &H9FAF, &H3005: 'do nothing, these are kanji
Case Else: Exit Function 'non kanji! don't have to check the rest
End Select
Next i
containsOnlyKanji = True 'if we've made it this far, the user must have entered only kanji
End Function
我知道这并不能直接回答你的问题,我也不喜欢人们贴出不直接回答问题的答案,但希望这能满足你的需要。(此外,如果您想包括katakana和hiragana,这些内容分别包含在Unicode块&H30A1到&H30FE和&H 3040 to &H309F中。)
https://stackoverflow.com/questions/37682548
复制相似问题