如果s
包含20000
和j
是Len(s)
以下如何將U + 20000之類的utf-32代碼轉換爲VBA中的字符?
Dim b(1 To 8)
b() = ChrW("&H" & Mid$(s, 1, j - 4)) & ChrW("&H" & Mid$(s, j - 3))
不起作用。它返回2個字符,而U + 20000是單個。
如果s
包含20000
和j
是Len(s)
以下如何將U + 20000之類的utf-32代碼轉換爲VBA中的字符?
Dim b(1 To 8)
b() = ChrW("&H" & Mid$(s, 1, j - 4)) & ChrW("&H" & Mid$(s, j - 3))
不起作用。它返回2個字符,而U + 20000是單個。
更好的代碼是基於這裏例如: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
這產生了兩個字符,因爲你_told_它產生兩個字符:'CHRW $( 「&H2」)CHRW $( 「&H0000」)'。一個問題可能是'VBA是否支持utf-32' – 2012-01-07 21:34:45