如何在VBA中将utf-32代码(如U+20000)转换为字符?

如何在VBA中将utf-32代码(如U+20000)转换为字符?,vba,character,utf-32,Vba,Character,Utf 32,如果s包含20000,且j为以下值 Dim b(1 To 8) b() = ChrW("&H" & Mid$(s, 1, j - 4)) & ChrW("&H" & Mid$(s, j - 3)) 不起作用。它返回2个字符,而U+20000是单个字符。更好的代码基于以下示例: 它生成了两个字符,因为您告诉它生成两个字符:ChrW$&H2&ChrW$&H0000。一个更好的问题可能是“VBA是否支持utf-32”,您应该将其作为问题的编辑,而不是答案发布。

如果s包含20000,且j为以下值

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

不起作用。它返回2个字符,而U+20000是单个字符。

更好的代码基于以下示例:


它生成了两个字符,因为您告诉它生成两个字符:ChrW$&H2&ChrW$&H0000。一个更好的问题可能是“VBA是否支持utf-32”,您应该将其作为问题的编辑,而不是答案发布。这是一个答案,代码适用于长十六进制字符串,我已经测试并使用了它。如果我发现了一些bug,我会把它们贴在这里。你可能想用更好的措辞来回答。现在,它看起来更像是你问题的补充,而不是答案。
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