This proposal introduces the AscU utility, a variant of the Asc function designed to retrieve the Unicode code point of any character.
While the standard AscW function is often used for this purpose, it is frequently misunderstood and misused. In practice, AscW returns a signed integer (ranging from -32,768 to 32,767). Some developers attempt to use it for UTF-8 conversion, and tests are often misinterpreted ex:
AscU:
Example:
Hope this works.
While the standard AscW function is often used for this purpose, it is frequently misunderstood and misused. In practice, AscW returns a signed integer (ranging from -32,768 to 32,767). Some developers attempt to use it for UTF-8 conversion, and tests are often misinterpreted ex:
Code:
Select Case AscW(Mid(Txt, i, 1)) 'AscW may returns a negative value
Case Is < 128:
Case Is < 2048:
...Code:
Function AscU(s As String, aPos) As Long
Dim h As Long, l As Long
h = AscW(Mid(s, aPos, 1)) And &HFFFF&
aPos = aPos + 1
If (h >= &HD800&) And (h <= &HDBFF&) Then
l = AscW(Mid(s, aPos, 1)) And &HFFFF&
aPos = aPos + 1
If (l >= &HDC00&) And (l <= &HDFFF&) Then
AscU = (h And &H3FF&) * 1024
AscU = (AscU Or (l And &H3FF&)) + &H10000
Exit Function
End If
End If
AscU = h
End FunctionCode:
Private Sub test()
Dim i As Long, s As String
i = 1
s = TextBox1 ' Unicode office TextBox control
While i <= Len(s)
Debug.Print Hex(AscU(s, i))
Wend
End Sub








