2012-01-07 1 views
1

Если s содержит 20000 и j является Len(s) следующиеКак преобразовать код utf-32 как U + 20000 в символ в 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_ его для получения двух символов: 'ДЖД $ ("& H2") и ДЖД $ ("& H0000")'. Вопрос о beter может быть «поддерживает VBA utf-32» –

ответ

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

+0

Трудно сказать, действительно ли это редактирование или ответ ... – BoltClock

+0

Это ответ, код работает для длинных шестнадцатеричных строк, я его протестировал и использовал. Если бы я обнаружил некоторые ошибки, они будут размещены здесь. – Dims

 Смежные вопросы

  • Нет связанных вопросов^_^