Function Uni(ParamArray charCode() As Variant) As String Uni = "" Dim v As Variant For Each v In charCode Uni = Uni & ChrW(v) Next End Function
Cells(2, 4).Value = ChrW(&H6298) Cells(3, 4).Value = ChrW(&HD86D) & ChrW(&HDF46) Cells(4, 4).Value = ChrW(&H845B) & ChrW(&HDB40) & ChrW(&HDD00) Cells(5, 4).Value = ChrW(&HD842) & ChrW(&HDF9F) & ChrW(&HDB40) & ChrW(&HDD00) Cells(6, 4).Value = ChrW(&H26F9) & ChrW(&HFE0F) & ChrW(&H200D) & ChrW(&H2640) & ChrW(&HFE0F) Cells(7, 4).Value = ChrW(&HD867) & ChrW(&HDE3D) & ChrW(&HDB40) & ChrW(&HDD01) Cells(8, 4).Value = ChrW(&HD867) & ChrW(&HDE3D) & ChrW(&HDB40) & ChrW(&HDD0A)
Public Function ToUTF16(codePage As Integer) As UShort() If codePage < 0 OrElse &H10FFFF < codePage Then Throw New ArgumentOutOfRangeException(NameOf(codePage)) End If If codePage <= &HFFFF Then 'BMP の場合は無加工 Return New UShort() {CUShort(codePage)} Else '①元の値から 0x10000 を引くことで、U+010000~U+10FFFF を 00000~FFFFF にする Dim u = CUShort(codePage - &H10000UI) '②それを 20ビットの2進数として表現 Dim b = Convert.ToString(u, 2).PadLeft(20, "0"c) '③上位サロゲートは、上位10ビットの前に"110110"を添えた値 Dim us = CUShort(Convert.ToInt32("110110" & b.Substring(0, 10), 2)) '④下位サロゲートは、下位10ビットの前に"110111"を添えた値 Dim ls = CUShort(Convert.ToInt32("110111" & b.Substring(10, 10), 2)) Return {us, ls} End If End Function