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

发布于 2024-12-25 14:47:41 字数 252 浏览 0 评论 0原文

如果s包含20000并且jLen(s),则以下内容

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

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

If s contains 20000 and j is Len(s) the following

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

does not work. It returns 2 characters while U+20000 is a single.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小霸王臭丫头 2025-01-01 14:47:41

更好的代码基于这里的示例: 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

Better code is based on here example: 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文