2012-01-07 64 views
1

如果s包含20000jLen(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是單個。

+1

這產生了兩個字符,因爲你_told_它產生兩個字符:'CHRW $( 「&H2」)CHRW $( 「&H0000」)'。一個問題可能是'VBA是否支持utf-32' – 2012-01-07 21:34:45

回答

0

更好的代碼是基於這裏例如: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 
+0

你應該發佈這個作爲你的問題的編輯,而不是作爲答案。 – brettdj 2012-01-08 09:31:23

+0

很難說這是真的是編輯還是答案... – BoltClock 2012-01-08 11:45:09

+0

這是一個答案,代碼適用於長六角形,我測試過並使用它。如果我發現一些錯誤,然後將它們發佈在這裏。 – Dims 2012-01-08 12:17:52

相關問題