技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 1187
|
問題,希臘字符,應(yīng)該是雙字節(jié),還是單字節(jié)呢,為什么?
不懂看下面測試
Sub TestLenDB()
Str = "ΑΒΓαβγ" '希臘字符,應(yīng)該是雙字節(jié),還是單字節(jié)呢
Debug.Print LenDB(Str), LenEx(Str), LenEx1(Str)
End Sub
返回單雙字節(jié)的三個(gè)算法
Public Function LenEx(VarString As Variant) As Variant
'算法一
LenEx = LenB(StrConv(VarString, vbFromUnicode)) '將Unicode轉(zhuǎn)換為ANSI,然后再計(jì)算字節(jié)長度
End Function
'算法二
Public Function LenEx1(VarString As Variant) As Variant
Dim lLen As Integer, i As Integer
LenEx1 = 0
lLen = Len(VarString)
If lLen Then '如長度不為零
For i = 1 To lLen
If Asc(Mid(VarString, i, 1)) < 0 Then
LenEx1 = LenEx1 + 2
Else
LenEx1 = LenEx1 + 1
End If
Next
End If
End Function
'算法三 直接操作對(duì)比Unicode碼
Function LenDB(Str As String) As Long
Dim i As Long, lngLenB As Long
Dim abytStr() As Byte
Const DoubleByte As Byte = &H30
abytStr = Str
lngLenB = LenB(Str)
For i = 1& To lngLenB Step 2&
If abytStr(i) < DoubleByte Then
lngLenB = lngLenB - 1&
End If
Next
LenDB = lngLenB
End Function
|
|