Как преобразовать код UTF-32, такой как U + 20000, в символ в VBA? - PullRequest
1 голос
/ 08 января 2012

Если s содержит 20000, а j равно Len(s), то следующее

Dim b(1 To 8)
b() = ChrW("&H" & Mid$(s, 1, j - 4)) & ChrW("&H" & Mid$(s, j - 3))

не работает. Возвращает 2 символа, в то время как U + 20000 - один.

1 Ответ

0 голосов
/ 08 января 2012

Лучший код основан на следующем примере: http://www.vbforums.com/archive/index.php/t-526476.html

Public Function ChrU(UCode As String) As String

Dim CharCode As Long
CharCode = Val("&H00" & Right(UCode, Len(UCode) - 2))

If CharCode < 0 Then
    CharCode = CharCode + 65536
End If

Dim lngChar As Long
If CharCode >= 0 Then
    If CharCode < &HD800& Then
        ChrU = ChrW$(CharCode)
        Exit Function
    ElseIf CharCode < &HDC00& Then
        ' UTF-16 surrogates are invalid in UTF-32
    ElseIf CharCode < &HFFFF& Then
        ChrU = ChrW$(CharCode)
        Exit Function
    ElseIf CharCode < &H10FFFF Then
        lngChar = CharCode - &H10000
        ChrU = ChrW$(&HD800& Or (lngChar \ 1024)) & ChrW$(&HDC00& Or (lngChar And &H3FF&))
        Exit Function
    End If
End If
Err.Raise 5
End Function
...