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:Code:Select Case AscW(Mid(Txt, i, 1)) 'AscW may returns a negative value Case Is < 128: Case Is < 2048: ...
Example: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 Function
Hope this works.Code: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




Reply With Quote